在 C++ 标准库中,std::vector 是一个动态数组容器,提供了类似于数组的功能,但具有自动调整大小的能力。它是 C++ 标准模板库(STL)的一部分,广泛用于存储和管理一组动态大小的元素。
std::vector 的特点
 
- 动态大小:可以自动调整大小,当插入或删除元素时,std::vector会自动调整自身的容量。
- 连续内存存储:std::vector在内存中是连续存储的,支持高效的随机访问。
- 丰富的成员函数:提供了多种成员函数用于元素的插入、删除、访问和遍历。
- 高效插入和删除:支持在末尾高效地插入和删除元素。
基本用法
包含头文件
#include <vector>
#include <iostream>
声明和初始化
std::vector<int> vec;                // 默认构造函数,创建一个空的 vector
std::vector<int> vec(10);            // 创建一个包含 10 个元素的 vector,元素值为默认值
std::vector<int> vec(10, 5);         // 创建一个包含 10 个元素的 vector,元素值为 5
std::vector<int> vec = {1, 2, 3, 4}; // 使用初始化列表创建 vector
访问元素
vec[0] = 10;            // 使用下标访问元素
int value = vec.at(1);  // 使用 at() 方法访问元素,带边界检查
int first = vec.front(); // 访问第一个元素
int last = vec.back();   // 访问最后一个元素
插入和删除元素
vec.push_back(6);       // 在末尾插入元素
vec.pop_back();         // 删除末尾元素
vec.insert(vec.begin() + 1, 8); // 在指定位置插入元素
vec.erase(vec.begin() + 2); // 删除指定位置的元素
vec.clear();            // 清空所有元素
迭代元素
// 使用范围 for 循环
for (int value : vec) {std::cout << value << " ";
}
std::cout << std::endl;// 使用迭代器
for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {std::cout << *it << " ";
}
std::cout << std::endl;
示例代码
以下是一个综合示例,展示了 std::vector 的常见操作:
#include <vector>
#include <iostream>int main() {// 创建并初始化 vectorstd::vector<int> vec = {1, 2, 3, 4, 5};// 访问和修改元素vec[0] = 10;vec.at(1) = 20;// 插入元素vec.push_back(6);vec.insert(vec.begin() + 2, 15);// 删除元素vec.pop_back();vec.erase(vec.begin() + 1);// 遍历并输出 vector 元素std::cout << "Vector elements: ";for (int value : vec) {std::cout << value << " ";}std::cout << std::endl;// 输出 vector 的大小和容量std::cout << "Size: " << vec.size() << std::endl;std::cout << "Capacity: " << vec.capacity() << std::endl;return 0;
}
常用成员函数
- size():返回当前元素个数。
- capacity():返回当前分配的存储容量。
- empty():检查容器是否为空。
- resize(size_t n):调整容器大小。
- reserve(size_t n):预留存储空间,以减少后续的重新分配。
- shrink_to_fit():减少容量以适应当前大小。
- assign():用新元素替换当前元素。
- data():返回指向容器中第一个元素的指针。
总结
std::vector 是一个非常灵活和高效的容器,适用于需要动态数组功能的场景。它提供了丰富的操作函数,可以方便地进行元素的插入、删除和访问。熟悉并掌握 std::vector 的用法是 C++ 编程的重要技能之一。