推荐答案
// www.javascriptcn.com code example
#include <vector>
#include <iostream>
int main() {
// 创建一个空的 vector
std::vector<int> vec;
// 向 vector 中添加元素
vec.push_back(10);
vec.push_back(20);
vec.push_back(30);
// 访问 vector 中的元素
std::cout << "First element: " << vec[0] << std::endl;
std::cout << "Second element: " << vec.at(1) << std::endl;
// 遍历 vector
for (int i = 0; i < vec.size(); ++i) {
std::cout << vec[i] << " ";
}
std::cout << std::endl;
// 使用迭代器遍历 vector
for (auto it = vec.begin(); it != vec.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
// 删除最后一个元素
vec.pop_back();
// 获取 vector 的大小
std::cout << "Vector size: " << vec.size() << std::endl;
// 检查 vector 是否为空
if (vec.empty()) {
std::cout << "Vector is empty" << std::endl;
} else {
std::cout << "Vector is not empty" << std::endl;
}
return 0;
}本题详细解读
1. std::vector 的特点
- 动态数组:
std::vector是 C++ 标准库中的一个动态数组容器,能够自动管理内存,支持动态扩展和收缩。 - 连续存储:
std::vector中的元素在内存中是连续存储的,因此可以通过指针算术来访问元素。 - 随机访问:
std::vector支持通过下标([]或at())快速访问任意位置的元素,时间复杂度为 O(1)。 - 自动扩容:当
std::vector的容量不足以容纳新元素时,它会自动分配更大的内存空间,并将原有元素复制到新空间。 - 丰富的成员函数:
std::vector提供了多种成员函数,如push_back()、pop_back()、size()、empty()等,方便操作和管理元素。
2. std::vector 的常用操作
创建
std::vector:std::vector<int> vec; // 创建一个空的 vector std::vector<int> vec2(10); // 创建一个包含 10 个元素的 vector,初始值为 0 std::vector<int> vec3(10, 5); // 创建一个包含 10 个元素的 vector,初始值为 5
添加元素:
vec.push_back(10); // 在 vector 末尾添加元素 vec.insert(vec.begin() + 1, 20); // 在指定位置插入元素
访问元素:
int first = vec[0]; // 通过下标访问元素 int second = vec.at(1); // 通过 at() 方法访问元素,会进行边界检查
遍历
std::vector:for (int i = 0; i < vec.size(); ++i) { std::cout << vec[i] << " "; } for (auto it = vec.begin(); it != vec.end(); ++it) { std::cout << *it << " "; }删除元素:
vec.pop_back(); // 删除最后一个元素 vec.erase(vec.begin() + 1); // 删除指定位置的元素
获取大小和容量:
int size = vec.size(); // 获取 vector 中元素的数量 int capacity = vec.capacity(); // 获取 vector 当前分配的内存容量
清空
std::vector:vec.clear(); // 清空 vector 中的所有元素
3. 注意事项
- 内存管理:虽然
std::vector会自动管理内存,但在频繁插入和删除操作时,可能会导致多次内存重新分配,影响性能。可以通过reserve()方法预先分配足够的内存来优化性能。 - 边界检查:使用
at()方法访问元素时,如果下标越界,会抛出std::out_of_range异常,而使用[]操作符则不会进行边界检查。 - 迭代器失效:在
std::vector中进行插入或删除操作时,可能会导致迭代器失效,需要特别注意。