当前位置: 首页 > 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;
}

http://www.xdnf.cn/news/265429.html

相关文章:

  • 2018-2020年 北京大学县域数字乡村指数
  • 深度学习:AI 机器人时代
  • Sharding-JDBC分库分表中的热点数据分布不均匀问题及解决方案
  • 第一节:OpenCV 基础入门-简介与环境搭建
  • AI开源框架对比:PyTorch vs TensorFlow vs PaddlePaddle
  • Java 入门篇
  • MySQL--索引入门
  • SQL笔记——左连接、右连接、内连接
  • Java线程创建与并发管理
  • 【第十六届蓝桥杯省赛】比赛心得与经验分享(PythonA 组)
  • 有机玻璃材质数据采集活性炭吸附气体中二氧化硫实验装置
  • Go小技巧易错点100例(二十七)
  • 数据分析与可视化实战:从鸢尾花到乳腺癌数据集
  • 数据库基础-库,表的操作
  • 人工智能——层次聚类算法
  • JVM 一文详解
  • 普通IT的股票交易成长史--20250502 突破(2)
  • 【Net】DPDK
  • Vscode/Code-Server 安装中文包——CI/CD
  • PCIe | TLP 报头 / 包格式 / 地址转换 / 配置空间 / 命令寄存器 / 配置类型
  • JMM 与 JVM 运行时数据区有什么区别和联系?
  • 数字化转型进阶:26页华为数字化转型实践分享【附全文阅读】
  • 传奇各职业/战士/法师/道士/头盔爆率及出处产出地/圣战/法神/天尊/祈祷/斗笠/精灵
  • 面向对象编程简介
  • list的两种设计
  • MySQL 比较运算符详解
  • 穿越数据森林与网络迷宫:树与图上动态规划实战指南
  • 深拷贝与浅拷贝的核心区别
  • 【unity游戏开发——Animator动画】Animation动画资源节约、优化、编辑修改小技巧
  • 人工智能:如何快速筛选出excel中某列存在跳号的单元格位置?