复试:机试——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
#机试#考研机试常用的数据结构 文章被收录于专栏
考研机试常用的数据结构
