C++ vector容器构造函数
C++中,vector容器有多个构造函数可供使用。以下是常用的几种构造函数:
- 默认构造函数:
vector<T> vec;
- 创建一个空的vector容器,其中T为元素的类型。
- 带有初始元素个数的构造函数:
vector<T> vec(size);
- 创建一个包含指定数量(size)个默认构造的元素的vector容器。
- 使用相同值初始化所有元素的构造函数:
vector<T> vec(size, value);
- 创建一个包含指定个数(size)个值为value的元素的vector容器。
- 利用迭代器范围构造函数:
vector<T> vec(first, last);
- 创建一个包含[first, last)范围内元素的vector容器。其中,first和last是迭代器,指向某个序列(比如数组)中的元素。
- 拷贝构造函数:
vector<T> vec(otherVec);
- 创建一个与另一个已存在的vector容器(otherVec)完全相同的副本。
这些构造函数提供了不同的方式来创建并初始化一个vector容器。根据需要选择合适的构造函数来构造vector对象。
C++ vector容器赋值操作
在C++中,vector容器支持多种赋值操作,以下是常用的几种赋值方式:
- 使用赋值操作符(=)对整个vector进行赋值:
vector<T> vec1 = {1, 2, 3, 4, 5}; vector<T> vec2; vec2 = vec1;
- 上述代码将vec1的所有元素赋值给vec2,两个vector容器中的元素完全相同。
- 使用assign()函数赋值:
vector<T> vec3; vec3.assign(5, 10);
- 上述代码将vec3的元素全部替换为5个值为10的元素。
- 使用迭代器和区间进行赋值:
vector<T> vec4 = {1, 2, 3, 4, 5}; vector<T> vec5; vec5.assign(vec4.begin(), vec4.end());
- 上述代码使用vec4的begin和end迭代器指定的范围来给vec5赋值,vec5将和vec4的内容一致。
- 使用swap函数交换两个vector的内容:
vector<T> vec6 = {1, 2, 3}; vector<T> vec7 = {4, 5, 6}; vec6.swap(vec7);
- 上述代码将vec6和vec7的内容进行交换,最终vec6中的元素变为{4, 5, 6},vec7中的元素变为{1, 2, 3}。
C++ vector容器容量和大小
在C++中,vector容器提供了容量(capacity)和大小(size)两个成员函数来描述容器的状态。
- 容量(capacity)指的是vector容器在重新分配内存之前可以容纳的元素数量。vector容器会自动管理内存,并在需要时动态分配更多的空间来存储元素。
- 使用
capacity()
函数可以获取当前vector容器的容量:
vector<T> vec; int capacity = vec.capacity();
- 如果想要改变vector容器的容量,可以使用
reserve()
函数或者resize()
函数:
reserve()
函数用于预留空间,但并不改变vector容器的大小。
vector<T> vec; vec.reserve(10); // 预留10个元素的空间
resize()
函数用于改变vector容器的大小,并可选地指定默认值。
vector<T> vec; vec.resize(5); // 改变为5个元素的大小,默认值为元素类型的默认构造函数的值 vec.resize(10, value); // 改变为10个元素的大小,并使用指定的value做为默认值
- 大小(size)指的是vector容器中当前实际包含的元素数量。
- 使用
size()
函数可以获取vector容器的当前大小:
vector<T> vec; int size = vec.size();
- 可以通过向vector容器中添加或删除元素来改变其大小:
- 使用
push_back()
函数将一个元素添加到vector容器的尾部:
vector<T> vec; vec.push_back(value);
- 使用
pop_back()
函数移除vector容器尾部的元素:
vector<T> vec; vec.pop_back();
- 使用
resize()
函数也可以改变vector容器的大小,详见上述容量的第二点。
总而言之,容量表示vector容器可以容纳的元素数量,大小表示vector容器当前实际包含的元素数量。可以通过成员函数和相应的操作来获取和改变容量和大小。
C++ vector容器插入和删除
在C++中,vector容器提供了多种方法来插入和删除元素。以下是常用的插入和删除操作:
- 插入元素:
- 在指定位置插入单个元素:
vector<T> vec = {1, 2, 3, 4, 5}; auto it = vec.begin() + 2; // 指向第三个位置 vec.insert(it, 10); // 在第三个位置前插入元素10
- 在指定位置插入多个元素:
vec.insert(it, 3, 10); // 在第三个位置前插入3个值为10的元素
- 在指定位置插入另一个vector的元素:
vector<T> anotherVec = {6, 7, 8}; vec.insert(vec.begin() + 2, anotherVec.begin(), anotherVec.end()); // 在第三个位置前插入anotherVec的所有元素
- 在末尾插入元素:
vec.push_back(20); // 在末尾添加元素20
- 删除元素:
- 删除指定位置的元素:
vec.erase(vec.begin() + 2); // 删除第三个位置的元素
- 删除指定范围的元素:
vec.erase(vec.begin() + 2, vec.begin() + 5); // 删除第三个到第五个位置之间的元素
- 删除末尾元素:
vec.pop_back(); // 删除末尾元素
- 清空整个vector:
vec.clear(); // 清空所有元素
C++ vector容器数据存取
在C++中,vector容器提供了多种方式来进行数据的存取操作。以下是常用的方法:
- 通过下标访问元素:
vector<int> vec = {1, 2, 3, 4, 5}; int element = vec[2]; // 访问第三个元素,下标从0开始
- 使用at()函数进行安全的访问元素(会进行越界检查):
int element = vec.at(2); // 访问第三个元素
- 使用迭代器访问元素:
vector<int>::iterator it = vec.begin(); // 指向第一个元素 int firstElement = *it; // 获取第一个元素的值
- 使用for循环遍历所有元素:
for(int i = 0; i < vec.size(); i++) { cout << vec[i] << " "; // 输出每个元素 }
- 使用范围-based for 循环(C++11及以上版本):
for(int num : vec) { cout << num << " "; // 输出每个元素 }
- 获取首尾元素:
int firstElement = vec.front(); // 获取首元素的值 int lastElement = vec.back(); // 获取末尾元素的值
C++ vector容器互换容器
在C++中,可以使用std::swap()函数来交换两个vector容器的内容。swap函数会交换两个容器中的元素,而不会复制整个容器。
下面是使用std::swap()函数交换两个vector容器的示例代码:
#include <iostream> #include <vector> int main() { std::vector<int> vec1 = {1, 2, 3}; std::vector<int> vec2 = {4, 5, 6}; std::cout << "vec1: "; for (int num : vec1) { std::cout << num << " "; } std::cout << std::endl; std::cout << "vec2: "; for (int num : vec2) { std::cout << num << " "; } std::cout << std::endl; std::swap(vec1, vec2); // 交换vec1和vec2的内容 std::cout << "After swap:" << std::endl; std::cout << "vec1: "; for (int num : vec1) { std::cout << num << " "; } std::cout << std::endl; std::cout << "vec2: "; for (int num : vec2) { std::cout << num << " "; } std::cout << std::endl; return 0; }
输出结果:
vec1: 1 2 3 vec2: 4 5 6 After swap: vec1: 4 5 6 vec2: 1 2 3
通过使用std::swap()函数,vec1和vec2的内容被互换了。注意,std::swap()函数是一个标准库函数,需要包含头文件来使用。这样可以高效地交换两个vector容器的内容。
C++ vector容器预留空间
在C++中,可以使用vector容器的reserve()函数来预留存储空间,以提前为容器分配一定大小的内存,从而提高程序的性能。预留空间后,当向vector容器添加元素时,不会频繁地重新分配内存,从而减少了内存分配和拷贝的开销。
下面是使用reserve()函数预留vector容器空间的示例代码:
#include <iostream> #include <vector> int main() { std::vector<int> vec; std::cout << "Capacity before reserve: " << vec.capacity() << std::endl; vec.reserve(100); // 预留至少能容纳100个元素的空间 std::cout << "Capacity after reserve: " << vec.capacity() << std::endl; return 0; }
运行上述示例代码,输出结果类似如下:
Capacity before reserve: 0 Capacity after reserve: 100
在这个示例中,通过调用vec.reserve(100)函数,使得vector容器vec的容量调整为至少能容纳100个元素的大小。