当前位置: 首页 > news >正文

C++STL之vector

        Vector

                动态数组,支持随机访问,尾部插入和删除高效

                适用场景:需要频繁访问且尾部操作比较多的情况

                创建和初始化。

                添加、删除和修改元素。

                访问和遍历元素。

                获取大小和容量。

                排序和交换。

        

        1.创建和初始化

#include <iostream>
#include <vector>int main() {// 创建一个空的 vectorstd::vector<int> vec1;// 创建并初始化一个包含 5 个元素的 vector,初始值为 0std::vector<int> vec2(5);// 创建并初始化一个包含 5 个元素的 vector,初始值为 10std::vector<int> vec3(5, 10);// 使用初始化列表创建 vectorstd::vector<int> vec4 = {1, 2, 3, 4, 5};// 输出 vec4 的内容std::cout << "vec4: ";for (int i : vec4) {std::cout << i << " ";}return 0;
}

        2.添加元素   

#include <iostream>
#include <vector>int main() {std::vector<int> vec;// 在尾部添加元素vec.push_back(10);vec.push_back(20);vec.push_back(30);// 使用 emplace_back 直接构造元素vec.emplace_back(40);// 输出 vector 内容std::cout << "vec: ";for (int i : vec) {std::cout << i << " ";}return 0;
}

     3.访问元素

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 使用下标访问元素std::cout << "Element at index 2: " << vec[2] << std::endl;// 使用 at() 访问元素(会检查边界)std::cout << "Element at index 3: " << vec.at(3) << std::endl;// 访问第一个和最后一个元素std::cout << "First element: " << vec.front() << std::endl;std::cout << "Last element: " << vec.back() << std::endl;return 0;
}

   4.遍历

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 使用下标遍历std::cout << "Using index: ";for (size_t i = 0; i < vec.size(); ++i) {std::cout << vec[i] << " ";}std::cout << std::endl;// 使用范围 for 循环遍历std::cout << "Using range-based for loop: ";for (int i : vec) {std::cout << i << " ";}std::cout << std::endl;// 使用迭代器遍历std::cout << "Using iterator: ";for (auto it = vec.begin(); it != vec.end(); ++it) {std::cout << *it << " ";}std::cout << std::endl;return 0;
}

5.修改

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 修改指定位置的元素vec[2] = 100;// 输出修改后的 vectorstd::cout << "Modified vec: ";for (int i : vec) {std::cout << i << " ";}return 0;
}

6.删除

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 删除最后一个元素vec.pop_back();// 删除指定位置的元素(删除第 2 个元素)vec.erase(vec.begin() + 1);// 输出剩余元素std::cout << "vec after deletions: ";for (int i : vec) {std::cout << i << " ";}return 0;
}

7.获取大小和容量

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 获取元素个数std::cout << "Size: " << vec.size() << std::endl;// 获取当前容量std::cout << "Capacity: " << vec.capacity() << std::endl;// 调整大小(如果新大小大于当前大小,会用默认值填充)vec.resize(10);// 预留空间(避免频繁扩容)vec.reserve(20);return 0;
}

8.排序

#include <iostream>
#include <vector>
#include <algorithm> // 包含 sort 函数int main() {std::vector<int> vec = {5, 3, 1, 4, 2};// 对 vector 进行升序排序std::sort(vec.begin(), vec.end());// 输出排序后的 vectorstd::cout << "Sorted vec: ";for (int i : vec) {std::cout << i << " ";}return 0;
}

9.二维Vector

#include <iostream>
#include <vector>int main() {// 创建一个 3x3 的二维 vectorstd::vector<std::vector<int>> vec = {{1, 2, 3},{4, 5, 6},{7, 8, 9}};// 访问二维 vector 的元素std::cout << "Element at (1, 2): " << vec[1][2] << std::endl;// 遍历二维 vectorfor (const auto& row : vec) {for (int val : row) {std::cout << val << " ";}std::cout << std::endl;}return 0;
}

10.vector交换

#include <iostream>
#include <vector>int main() {std::vector<int> vec1 = {1, 2, 3};std::vector<int> vec2 = {4, 5, 6};// 交换两个 vector 的内容vec1.swap(vec2);// 输出交换后的结果std::cout << "vec1: ";for (int i : vec1) {std::cout << i << " ";}std::cout << "\nvec2: ";for (int i : vec2) {std::cout << i << " ";}return 0;
}

相关文章:

  • 【KWDB 创作者计划】使用Docker实现KWDB数据库的快速部署与配置
  • 【中间件】brpc_基础_用户态线程上下文
  • 理解数学概念——支集(支持)(support)
  • IEEE LaTeX会议模板作者对齐、部门长名称换行
  • 5.3刷题
  • 多元随机变量协方差矩阵
  • HTTP基础介绍+OSI七层参考模型+HTTP协议介绍
  • linux的时间轮
  • STM32部分:2-1、STM32CubeMX介绍
  • Spring Cache使用
  • Python表达式全解析:从基础到高级
  • Java多语言DApp质押挖矿盗U源码(前端UniApp纯源码+后端Java)
  • 算法每日一题 | 入门-顺序结构-数字反转
  • c++回调函数
  • Python 线程安全机制:Lock、RLock、Semaphore 的使用场景与最佳实践
  • PyTorch_创建01张量
  • Java虚拟线程基础介绍
  • 突破认知边界:神经符号AI的未来与元认知挑战
  • JAVA刷题记录: 递归,搜索与回溯
  • 纯Java实现STDIO通信的MCP Server与客户端验证
  • 抗战回望17︱《青年界》:给一般青年供给一些精神的食料
  • 新华每日电讯“关爱青年成长”三连评:青春应有多样的精彩
  • 对华小额包裹免税取消=更高价格+更慢物流,美消费者为关税政策买单
  • 印尼巴厘岛多地停电,疑似海底电缆发生故障
  • 17家A股城商行一季报扫描:青岛银行营收增速领跑,杭州银行净利增速领跑
  • “三桶油”一季度净赚966亿元:业绩分化加剧,有人欢喜有人愁