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

C++ : 序列容器之Vector

序列容器之Vector

是 C++ 标准库中的一种序列容器
Vector的特征
(1)Vector和Array相同点是:都是数组、都是contiguousIterator、容器内元素种类都相同
(2)Vector和Array不同点是:Array是固定数组;Vector是动态数组,可以按需扩展数组大小
(3)vector 的存储是自动管理的,按需扩张收缩。
(4)vector 通常占用多于静态数组的空间,因为要分配更多内存以管理将来的增长
(5)vector 所用的方式不在每次插入元素时,而只在额外内存耗尽时重分配。

创建和初始化

#include <iostream>
#include <vector>int main() {// 创建一个空的vectorstd::vector<int> vec;// 使用初始值创建vectorstd::vector<int> vec_with_size(5); // 创建一个包含5个元素的vector,元素值为默认值0std::vector<int> vec_with_values(5, 10); // 创建一个包含5个元素的vector,元素值为10// 使用列表初始化vectorstd::vector<int> vec_with_list = {1, 2, 3, 4, 5};return 0;
}

添加元素

#include <iostream>
#include <vector>int main() {std::vector<int> vec;// 在vector的末尾添加元素vec.push_back(1);vec.push_back(2);vec.push_back(3);// 插入元素到指定位置vec.insert(vec.begin() + 1, 4); // 在第二个位置插入4for (int val : vec) {std::cout << val << " "; // 输出: 1 4 2 3}std::cout << std::endl;return 0;
}

访问元素

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 使用下标访问元素std::cout << vec[0] << std::endl; // 输出: 1// 使用at()方法访问元素std::cout << vec.at(1) << std::endl; // 输出: 2// 访问第一个和最后一个元素std::cout << vec.front() << std::endl; // 输出: 1std::cout << vec.back() << std::endl; // 输出: 5// 获取底层数组指针int* data = vec.data();std::cout << data[2] << std::endl; // 输出: 3return 0;
}

遍历元素

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

删除元素

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 删除最后一个元素vec.pop_back();// 删除指定位置的元素vec.erase(vec.begin() + 1); // 删除第二个元素// 删除指定范围的元素vec.erase(vec.begin(), vec.begin() + 2); // 删除前两个元素for (int val : vec) {std::cout << val << " "; // 可能输出: 4 5}std::cout << std::endl;return 0;
}

其他常用操作

#include <iostream>
#include <vector>int main() {std::vector<int> vec = {1, 2, 3, 4, 5};// 获取vector的大小std::cout << "Size: " << vec.size() << std::endl; // 输出: Size: 5// 检查vector是否为空std::cout << "Is empty: " << std::boolalpha << vec.empty() << std::endl; // 输出: Is empty: false// 改变vector的大小vec.resize(3); // 现在vec包含3个元素// 清空vectorvec.clear(); // 现在vec为空for (int val : vec) {std::cout << val << " "; // 不会输出任何东西,因为vec为空}std::cout << std::endl;return 0;
}

总结

定义:Vector是定义在命名空间std内的模板,是一种随机迭代器,其内存管理是一块连续分配的内存,支持动态扩展。
头文件:,在使用时需要包含此头文件。

特点:
元素连续存储,支持随机访问,访问效率与数组相同。
动态大小管理,容器大小可以自动调整。
分配额外的空间以适应可能的增长,避免频繁的内存重新分配。

学习记录,侵权联系删除。
来源:朱老师物联网大课堂

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 面试场景题系列--(3)如何避免超预期的高并发压力压垮系统?限流算法--xunznux
  • 微服务架构下Mojo模型的创新应用:细粒度服务与智能优化
  • 【LLM】-08-搭建问答系统-语言模型,提问范式与 Token
  • 虚拟机centos9搭建wordpress
  • c++ 自定义异常
  • 相机的内参与外参
  • 端到端自动驾驶科普向
  • 数据结构和算法入门
  • 调度器——DolphinScheduler讲解及安装教程
  • 【C++进阶学习】第九弹——哈希的原理与实现——开放寻址法的讲解
  • 测试开发面试题---计算机网络
  • 减轻幻觉新SOTA,7B模型自迭代训练效果超越GPT-4,上海AI lab发布
  • AutoSAR自适应平台架构总览--AP的初认识
  • Python入门第二课
  • 【专题】百度萝卜快跑体验:Robotaxi发展现状与展望报告合集PDF分享(附原数据表)
  • 【知识碎片】第三方登录弹窗效果
  • CSS 专业技巧
  • Django 博客开发教程 8 - 博客文章详情页
  • Docker 笔记(2):Dockerfile
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Java 最常见的 200+ 面试题:面试必备
  • JavaScript实现分页效果
  • PHP的类修饰符与访问修饰符
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Xmanager 远程桌面 CentOS 7
  • 安卓应用性能调试和优化经验分享
  • 代理模式
  • 无服务器化是企业 IT 架构的未来吗?
  • 物联网链路协议
  • 学习使用ExpressJS 4.0中的新Router
  • 好程序员大数据教程Hadoop全分布安装(非HA)
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (Redis使用系列) Springboot 使用redis实现接口幂等性拦截 十一
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (佳作)两轮平衡小车(原理图、PCB、程序源码、BOM等)
  • (六)软件测试分工
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (四)软件性能测试
  • (一)C语言之入门:使用Visual Studio Community 2022运行hello world
  • (转载)虚函数剖析
  • (状压dp)uva 10817 Headmaster's Headache
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • .CSS-hover 的解释
  • .NET Core 项目指定SDK版本
  • .Net OpenCVSharp生成灰度图和二值图
  • .NET/C# 使窗口永不获得焦点
  • .NET下ASPX编程的几个小问题
  • @PostConstruct 注解的方法用于资源的初始化