std::vector:
std::vector
是 C++ 标准库中的一个动态数组容器,它提供了一个可以动态调整大小的数组。std::vector
是一个非常常用的容器,主要用于存储和管理元素的集合,并且支持高效的随机访问和动态调整大小。
基本特性
- 动态大小 :
std::vector
可以根据需要动态地增加或减少大小,自动管理内存。 - 随机访问 : 支持高效的随机访问,通过
operator[]
和at()
方法可以直接访问元素。 - 连续存储 : 内部存储是连续的,这使得
std::vector
支持快速的元素访问和高效的缓存性能。 - 自动管理内存 :
std::vector
会自动管理内存,不需要用户手动释放内存。
常用操作
以下是一些 std::vector
的常用操作及其示例:
1. 创建 std::vector
cpp
#include <vector>
int main() {
// 创建一个空的 vector,元素类型为 int
std::vector<int> vec1;
// 创建一个初始化为 10 个元素的 vector,元素值为 0
std::vector<int> vec2(10);
// 创建一个初始化为 10 个元素的 vector,元素值为 5
std::vector<int> vec3(10, 5);
// 使用初始化列表创建 vector
std::vector<int> vec4 = {1, 2, 3, 4, 5};
return 0;
}
2. 访问和修改元素
cpp
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {10, 20, 30, 40, 50};
// 通过下标访问
std::cout << "Element at index 2: " << vec[2] << std::endl;
// 使用 at() 方法访问,提供边界检查
std::cout << "Element at index 3: " << vec.at(3) << std::endl;
// 修改元素
vec[2] = 100;
std::cout << "Modified element at index 2: " << vec[2] << std::endl;
return 0;
}
3. 添加和删除元素
cpp
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec;
// 添加元素到末尾
vec.push_back(10);
vec.push_back(20);
vec.push_back(30);
std::cout << "Vector size after push_back: " << vec.size() << std::endl;
// 删除末尾元素
vec.pop_back();
std::cout << "Vector size after pop_back: " << vec.size() << std::endl;
// 清空所有元素
vec.clear();
std::cout << "Vector size after clear: " << vec.size() << std::endl;
return 0;
}
4. 遍历 std::vector
cpp
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 使用范围 for 循环
for (const auto& elem : vec) {
std::cout << elem << " ";
}
std::cout << std::endl;
// 使用迭代器遍历
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
5. 其他常用方法
size()
: 返回vector
中元素的数量。capacity()
: 返回vector
当前分配的内存容量(即当前可以容纳多少个元素而不需要重新分配内存)。empty()
: 判断vector
是否为空。reserve()
: 预留一定的内存容量,减少重新分配的次数。resize()
: 改变vector
的大小,并且可以用新大小填充默认值。
示例 :
cpp
#include <vector>
#include <iostream>
int main() {
std::vector<int> vec = {1, 2, 3, 4, 5};
// 输出容量
std::cout << "Initial capacity: " << vec.capacity() << std::endl;
// 增加元素
vec.push_back(6);
// 输出容量
std::cout << "Capacity after adding one element: " << vec.capacity() << std::endl;
// 预留空间
vec.reserve(20);
std::cout << "Capacity after reserving space for 20 elements: " << vec.capacity() << std::endl;
// 调整大小
vec.resize(10, 0);
std::cout << "Size after resizing to 10: " << vec.size() << std::endl;
return 0;
}
在这段代码中,vec.resize(10, 0);
语句将 vec
的大小调整为 10。如果 vec
的当前大小小于 10,resize
方法会在末尾添加元素,新增的元素会被初始化为 0
。如果 vec
的当前大小已经大于等于 10,resize
方法会将多余的元素移除,以使大小变为 10。
在调整大小后,std::cout << "Size after resizing to 10: " << vec.size() << std::endl;
语句将输出 vec
的新大小,也就是 10
。