复试:机试——vector
在 C++ 中,std::vector
是标准模板库(STL)里非常实用的容器,它能够存储一系列相同类型的元素,并且大小可以动态改变。以下是 std::vector
的一些常见用法:
1. 包含头文件
要使用 std::vector
,需要包含 <vector>
头文件:
#include <vector>
2. 定义和初始化
- 默认初始化:创建一个空的
vector
。
#include <vector> #include <iostream> int main() { std::vector<int> vec; // 创建一个存储 int 类型元素的空 vector return 0; }
- 指定初始大小:创建一个包含指定数量元素的
vector
,元素初始值为默认值。
std::vector<int> vec(5); // 创建一个包含 5 个 int 元素的 vector,初始值为 0
- 指定初始大小和初始值:创建一个包含指定数量元素的
vector
,并将所有元素初始化为指定值。
std::vector<int> vec(5, 10); // 创建一个包含 5 个 int 元素的 vector,每个元素的值都是 10
- 使用初始化列表:使用花括号
{}
来初始化vector
。
std::vector<int> vec = {1, 2, 3, 4, 5}; // 创建一个包含 5 个元素的 vector,元素值分别为 1, 2, 3, 4, 5
- 使用另一个
vector
初始化:
std::vector<int> vec1 = {1, 2, 3}; std::vector<int> vec2(vec1); // 使用 vec1 初始化 vec2,vec2 内容与 vec1 相同
3. 访问元素
- 使用下标运算符
[]
:类似于数组,通过下标访问元素,但不进行边界检查。
std::vector<int> vec = {1, 2, 3}; std::cout << vec[1] << std::endl; // 输出第二个元素,即 2
- 使用
at()
成员函数:通过下标访问元素,会进行边界检查,如果越界会抛出std::out_of_range
异常。
std::vector<int> vec = {1, 2, 3}; try { std::cout << vec.at(1) << std::endl; // 输出第二个元素,即 2 std::cout << vec.at(3) << std::endl; // 会抛出 std::out_of_range 异常 } catch (const std::out_of_range& e) { std::cerr << "Out of range error: " << e.what() << std::endl; }
- 使用迭代器:迭代器可以用来遍历
vector
中的元素。
std::vector<int> vec = {1, 2, 3}; for (auto it = vec.begin(); it != vec.end(); ++it) { std::cout << *it << " "; // 输出每个元素 } std::cout << std::endl;
- 范围 for 循环:更简洁的遍历方式。
std::vector<int> vec = {1, 2, 3}; for (int num : vec) { std::cout << num << " "; // 输出每个元素 } std::cout << std::endl;
4. 修改元素
- 直接赋值:通过下标或迭代器修改元素的值。
std::vector<int> vec = {1, 2, 3}; vec[1] = 10; // 将第二个元素修改为 10
- 使用
push_back()
方法:在vector
的末尾添加一个元素。
std::vector<int> vec = {1, 2, 3}; vec.push_back(4); // 在末尾添加元素 4
- 使用
pop_back()
方法:移除vector
的最后一个元素。
std::vector<int> vec = {1, 2, 3}; vec.pop_back(); // 移除最后一个元素,此时 vec 为 {1, 2}
- 使用
insert()
方法:在指定位置插入元素。
std::vector<int> vec = {1, 2, 3}; auto it = vec.begin() + 1; vec.insert(it, 10); // 在第二个位置插入元素 10,此时 vec 为 {1, 10, 2, 3}
- 使用
erase()
方法:移除指定位置或指定范围的元素。
std::vector<int> vec = {1, 2, 3, 4, 5}; auto it = vec.begin() + 2; vec.erase(it); // 移除第三个元素,此时 vec 为 {1, 2, 4, 5} auto first = vec.begin() + 1; auto last = vec.begin() + 3; vec.erase(first, last); // 移除第二个到第三个元素,此时 vec 为 {1, 5}
5. 获取 vector
的大小和容量
size()
方法:返回vector
中元素的数量。
std::vector<int> vec = {1, 2, 3}; std::cout << "Size: " << vec.size() << std::endl; // 输出 3
empty()
方法:判断vector
是否为空。
std::vector<int> vec; if (vec.empty()) { std::cout << "Vector is empty." << std::endl; }
capacity()
方法:返回vector
当前分配的存储空间能够容纳的元素数量。
std::vector<int> vec = {1, 2, 3}; std::cout << "Capacity: " << vec.capacity() << std::endl;
reserve()
方法:为vector
预留一定的存储空间,避免多次重新分配内存。
std::vector<int> vec; vec.reserve(100); // 预留 100 个元素的存储空间
6. 清空 vector
clear()
方法:移除vector
中的所有元素,使其大小变为 0,但容量不变。
std::vector<int> vec = {1, 2, 3}; vec.clear(); // vec 变为空,大小为 0#机试#
考研机试常用的数据结构 文章被收录于专栏
考研机试常用的数据结构