复试:机试——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

#机试#
考研机试常用的数据结构 文章被收录于专栏

考研机试常用的数据结构

全部评论

相关推荐

10-19 10:28
已编辑
西南石油大学 后端工程师
团孝子已上线feeling:面了很多家公司,能感受到目前只有小公司+外包喜欢问八股。大厂虽然也问八股,但是是从实习、项目中进行提问,并且大厂会问很深,面试官也会对你的回答进行思考➕追问,所以准备大厂面试前一定要备好相关资料。对于算法,我做的是codetop前100+力扣hot100+力扣高频150,面试中实感hot100就足够,基本上只要是hot100就秒答。对于项目和八股,我做的也是烂大街的星球项目,八股则是看小林和问ai,自己也写了很多技术博客和画了很多思维导图,并且自己也尝试用嘴巴说出来,不只停留于纸面。运气也很重要,必须要让面试官/HR看到简历才行,所以建议投递时间是下午两点。tl:第一岗位9.9&nbsp;投递9.10&nbsp;一面(一面评价:最近见过最强的大三,结束五分钟后约二面,都晚上九点了不下班吗)9.11&nbsp;二面(三道算法a出两道,反问评价:经验不够等横向,我实习生要啥经验)9.21挂(实习时间过短+其他原因,想要一年实习的,为什么不招个正职)第二岗位10.10投递10.11约面(主管打电话,说看到我之前投递记录了想要我挂qa职进去干后端,同意)10.14&nbsp;一面(无八股,主动说确实很强,意愿很强)10.16&nbsp;oc其余,友邦,东软,东华,惠择,用友oc已拒京东测开一面挂(投后端被测开捞)腾讯测试已拒(投后端被测开捞)ps:表扬惠择的主管面,没怎么问技术(可能是一面面试官沟通过了),全程一起讲大道理,解答了心中很多疑惑,也告诉我以面试官角度来看怎么选候选人,如果可以下次一定选惠择
HeaoDng:美团好像可以触发一面通
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务