vector介绍和用法
C++中的`vector`是一个非常重要的容器,它提供了一种动态数组的功能,允许在运行时增加或减少元素的数量。`vector`的存储空间是连续的,这使得它在某些操作上(如随机访问和内存效率)比其他容器(如`list`)更高效。 ## 1. `vector`的定义和初始化 ### (1) 默认初始化 ```cpp vector<typeName> v1; // 默认为空 ``` ### (2) 复制初始化 ```cpp vector<typeName> v2(v1); // v2 是 v1 的副本 v2 = v1; // 通过赋值操作符复制 vector<typeName> v2(v1.begin(), v1.end()); // 使用迭代器复制 ``` ### (3) 初始化指定大小和元素值 ```cpp vector<typeName> v3(n, i); // 包含n个值为i的元素 vector<typeName> v4(n); // 包含n个值为0的元素 int a[4] = {0, 1, 2, 3, 3}; vector<int> v5(a, a + 5); // 从数组初始化 ``` ## 2. 值初始化 在未指定元素初始化式的情况下,`vector`会使用默认构造函数来初始化每个元素。如果元素类型具有构造函数,那么会调用相应的构造函数进行初始化。对于没有构造函数的类型,会创建一个具有初始值的对象来进行值初始化。 ## 3. `vector`操作 ### (1) 添加元素 ```cpp v.push_back(t); // 在末尾添加元素t ``` ### (2) 获取元素数量 ```cpp v.size(); // 返回元素数量 ``` ### (3) 判断是否为空 ```cpp v.empty(); // 判断是否为空 ``` ### (4) 访问元素 ```cpp v[n]; // 访问第n个元素 ``` ### (5) 插入元素 ```cpp v.insert(pointer, number, content); // 在指定位置插入number个content v.insert(pointer, content); // 在指定位置插入单个content v.insert(pointer, a + 2, a + 4); // 插入数组部分 ``` ### (6) 删除末尾元素 ```cpp v.pop_back(); // 删除末尾元素 ``` ### (7) 删除元素范围 ```cpp v.erase(pointer1, pointer2); // 删除pointer1到pointer2间的元素 ``` ### (8) 相等比较 ```cpp v1 == v2; // 判断两个vector是否相等 ``` ### (9) 关系操作符 ```cpp !=, <, <=, >, >= // 保持常规意义的比较操作 ``` ### (10) 迭代器 ```cpp vector<typeName>::iterator p = v1.begin(); // 指向第一个元素 *p; // 获取所指元素的值 p = v1.end(); // 指向最后一个元素的下一个位置 ``` ### (11) 清空容器 ```cpp v.clear(); // 删除所有元素 ``` ## 4. 泛型算法与`vector` `<algorithm>`库提供了多种用于操作`vector`的泛型算法,如: - `find()`: 在序列中查找特定元素的第一个出现位置。 - `search()`: 在序列中查找子序列的第一次出现。 - `count()`: 统计序列中特定元素的出现次数。 这些算法可以方便地与`vector`结合使用,增强代码的可读性和效率。 `vector`是C++中一个强大的容器,它提供了灵活的动态数组功能,支持多种操作,适用于许多不同的编程场景。了解并熟练使用`vector`,能够极大地提高C++程序的编写效率和代码质量。