在 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++ 编程的重要技能之一。