首页 >> 你问我答 >

问c 中vector的用法详解

2026-04-20 11:26:40

答

【c 中vector的用法详解】在 C++ 中,`vector` 是一个非常常用且强大的容器,它提供了动态数组的功能,能够根据需要自动扩展或缩小。与传统的数组相比,`vector` 更加灵活、安全,并且提供了丰富的操作方法。本文将对 `vector` 的基本用法进行详细总结,并通过表格形式展示其常用操作。

一、vector 简介

`vector` 是 C++ 标准库中 `std::vector` 类模板的一种实现,属于 `` 头文件中的内容。它可以存储任意类型的元素,如 `int`、`string`、自定义对象等。`vector` 的最大优点是支持动态内存分配,避免了静态数组大小固定的限制。

二、vector 常用操作总结

操作 说明 示例代码
`include ` 引入 vector 头文件 `include `
`std::vector vec;` 定义一个 vector `std::vector vec;`
`vec.push_back(x);` 将元素 x 添加到 vector 尾部 `vec.push_back(5);`
`vec.pop_back();` 删除 vector 最后一个元素 `vec.pop_back();`
`vec.size();` 返回 vector 当前元素个数 `int n = vec.size();`
`vec.empty();` 判断 vector 是否为空 `if (vec.empty()) ...`
`vec.clear();` 清空 vector 所有元素 `vec.clear();`
`vec.capacity();` 返回 vector 当前容量(即能容纳的元素数量) `int cap = vec.capacity();`
`vec.resize(n);` 调整 vector 大小为 n `vec.resize(10);`
`vec.reserve(n);` 预分配内存,提高性能 `vec.reserve(100);`
`vec.at(i);` 访问第 i 个元素,越界会抛出异常 `int val = vec.at(2);`
`vec[i];` 访问第 i 个元素,不检查越界 `int val = vec[2];`
`vec.begin();` 返回指向第一个元素的迭代器 `auto it = vec.begin();`
`vec.end();` 返回指向最后一个元素之后的迭代器 `auto it = vec.end();`
`vec.insert(pos, value);` 在 pos 位置插入一个元素 `vec.insert(vec.begin(), 10);`
`vec.erase(pos);` 删除 pos 位置的元素 `vec.erase(vec.begin());`
`vec.erase(start, end);` 删除 [start, end) 区间内的所有元素 `vec.erase(vec.begin(), vec.end() - 1);`

三、vector 的初始化方式

初始化方式 说明 示例
默认构造 创建一个空 vector `std::vector vec;`
指定大小 创建一个包含 n 个默认值的 vector `std::vector vec(5);`
指定大小和值 创建一个包含 n 个值为 x 的 vector `std::vector vec(5, 10);`
使用数组初始化 从数组中复制元素 `int arr[] = {1, 2, 3}; std::vector vec(arr, arr + 3);`
使用另一个 vector 初始化 从另一个 vector 复制 `std::vector vec2(vec);`

四、vector 的性能特点

- 动态扩容:当 `vector` 元素数量超过当前容量时,会自动分配更大的内存并复制数据。

- 随机访问快:支持通过下标快速访问元素。

- 插入/删除效率低:在中间或头部插入/删除元素会导致大量数据移动,影响性能。

五、使用建议

- 如果需要频繁在中间或头部插入/删除元素,考虑使用 `list` 或 `deque`。

- 若需优化内存使用,可提前调用 `reserve()` 方法预分配空间。

- 使用 `at()` 方法访问元素更安全,避免越界错误。

六、总结

`vector` 是 C++ 中非常实用的数据结构,具有灵活性和高效性。掌握其基本用法和常见操作,有助于编写更高效、安全的程序。通过本篇总结,希望你对 `vector` 的使用有了更清晰的认识。

  免责声明:本答案或内容为用户上传,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。 如遇侵权请及时联系本站删除。

 
分享:
最新文章