掌握C++ vector的使用技巧及代码实例

5星 · 超过95%的资源 需积分: 50 51 下载量 93 浏览量 更新于2025-02-23 收藏 18KB RAR 举报
## vector使用详解 ### 概述 在C++中,`std::vector` 是一种序列容器,其元素可以在运行时动态地改变大小。`vector` 类位于`<vector>`头文件中,是C++标准模板库(STL)的一部分。它允许我们存储任意类型的对象,这些对象在内存中连续存储,因此可以提供高效的随机访问。`vector` 除了动态数组的基本操作外,还提供了很多实用的成员函数,用于插入、删除、访问元素,以及管理内存等。 ### vector的基本属性和操作 #### 头文件和命名空间 在使用`std::vector`之前,需要包含头文件`#include <vector>`,并且由于它位于`std`命名空间中,因此在使用时需要使用`std::`前缀,除非使用`using namespace std;`声明。 #### 构造函数 `vector`有多个构造函数,包括默认构造函数、复制构造函数和接受范围的构造函数等。 - 默认构造函数:`std::vector<T> v;` 创建一个空的vector。 - 带有元素个数的构造函数:`std::vector<T> v(n);` 创建一个含有n个元素的vector,每个元素都进行值初始化。 - 带有元素个数和初值的构造函数:`std::vector<T> v(n, val);` 创建一个含有n个元素的vector,每个元素都初始化为`val`。 - 带有范围的构造函数:`std::vector<T> v(first, last);` 创建一个含有[first, last)范围内所有元素的vector。 #### 赋值 - 赋值运算符`=`:可以直接使用赋值运算符来复制一个`vector`的所有元素到另一个`vector`。 - `assign`方法:`v.assign(n, val);` 将`n`个`val`赋给`vector v`。 #### 元素访问 - `operator[]`:通过下标访问元素,不进行越界检查。 - `at()`方法:通过下标访问元素,但会进行越界检查。 - `front()`方法:访问`vector`的第一个元素。 - `back()`方法:访问`vector`的最后一个元素。 #### 插入和删除 - `push_back()`:在`vector`末尾插入一个元素。 - `pop_back()`:删除`vector`末尾的元素。 - `insert()`:在指定位置插入元素,例如`v.insert(pos, val)`在位置`pos`插入`val`。 - `erase()`:删除指定位置的元素或指定范围的元素,例如`v.erase(pos)`删除位置`pos`的元素。 - `clear()`:清空`vector`的所有元素。 #### 大小和容量 - `size()`:返回`vector`中元素的数量。 - `capacity()`:返回`vector`在不进行内存分配的情况下可以容纳的元素数量。 - `resize()`:调整`vector`的大小,如果新的大小大于原大小,则添加默认值初始化的元素。 - `reserve()`:请求`vector`分配足够的空间来容纳至少`n`个元素,如果`n`大于当前容量,则此函数会导致内存分配。 #### 其他操作 - `empty()`:检查`vector`是否为空。 - `swap()`:交换两个`vector`的内容。 - `begin()` 和 `end()`:分别返回指向`vector`开头和结尾的迭代器。 - `rbegin()` 和 `rend()`:分别返回指向`vector`结尾和开头的反向迭代器。 - `sort()`:对`vector`进行排序,可以接受自定义的比较函数。 - `find()`:在`vector`中查找指定值的第一个位置。 - `remove()`:删除所有指定值的元素,但不改变`vector`的大小。 ### 示例代码解析 假设我们有如下示例代码`vector的使用.txt`或`Vector的使用`中,展示如何创建一个`std::vector`,并使用其提供的各种功能。 ```cpp #include <iostream> #include <vector> int main() { // 默认构造函数创建vector std::vector<int> v; // 使用push_back添加元素 v.push_back(1); v.push_back(2); v.push_back(3); // 访问元素 std::cout << "第一个元素是: " << v.front() << std::endl; std::cout << "最后一个元素是: " << v.back() << std::endl; // 遍历vector for(int n : v) { std::cout << n << ' '; } std::cout << std::endl; // 删除第一个元素 v.erase(v.begin()); // 插入新元素 v.insert(v.begin(), 0); // 判断是否为空 if (!v.empty()) { std::cout << "vector不为空" << std::endl; } // 清空vector v.clear(); // 判断vector是否为空 if (v.empty()) { std::cout << "vector现在为空" << std::endl; } return 0; } ``` 在上述代码中,演示了如何创建一个`vector`,使用`push_back()`添加元素,使用`front()`和`back()`访问第一个和最后一个元素,使用范围for循环遍历`vector`,使用`erase()`删除元素,以及使用`empty()`判断`vector`是否为空。这个代码片段覆盖了`vector`的一些核心用法。 ### 总结 `std::vector`是C++中非常重要的容器之一,其动态数组的特性使得它在需要动态管理内存的场景下非常有用。通过上述的详细用法和示例代码解析,可以看出`vector`提供了非常丰富的成员函数,使得我们可以方便地进行数据的插入、删除、访问和查询操作。熟练掌握`std::vector`的使用,对于任何希望深入学习C++的开发者而言,都是必不可少的技能。
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部