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

C++顺序容器概述

文章目录

    • 概要
    • array、vector和string
    • 总结

概要

在C++中,容器是C++标准库中的重要组成部分,众所周知,C++标准库中分为:容器、迭代器、分配器、算法以及仿函数等等。一个容器就是一些特定类型对象的集合。而顺序容器为程序员提供了控制元素存储和访问顺序的能力。下面我们就来介绍一些常见的容器,那么系好安全带,我们要发车了!

array、vector和string

array叫作数组,与我们在C++中常用的数组一样,其特点是具有固定大小,支持快速随机访问,与其他容器不同的是array在使用时需要指定其大小,如array<int,10>,其原因就在于array是固定数组大小,不能像vector、和string等容器一样进行动态扩容,以下是一些array常见的初始化操作

#include<iostream>#include<array>usingnamespacestd;intmain(){// 方式1:全量初始化(元素个数=数组大小)array<int,5>arr1={1,2,3,4,5};// 推荐写法,清晰array<int,5>arr1_alt{1,2,3,4,5};// 等价写法(省略=)// 方式2:部分初始化(未赋值元素自动补0)array<int,5>arr2={10,20};// 结果:[10, 20, 0, 0, 0]array<double,4>arr3{3.14,2.718};// 结果:[3.14, 2.718, 0.0, 0.0]return0;}

vector容器如上述所说,是一种可变大小数组,同时支持快速随机访问,但是在尾部之外的位置插入或删除的元素可能很慢。其常见的初始化方式如下:

#include<vector>#include<array>// 范围初始化依赖usingnamespacestd;intmain(){// 1. 列表初始化(最常用)vector<int>vec1={1,2,3,4,5};// 标准列表初始化vector<string>vec2{"C++","Java","Python"};// 省略=的统一初始化vector<double>vec3{};// 空列表初始化// 2. 指定大小+默认值初始化vector<int>vec4(5);// 大小5,元素默认值0vector<int>vec5(5,99);// 大小5,所有元素为99vector<string>vec6(3,"hi");// 大小3,所有元素为"hi"// 3. 拷贝初始化vector<int>src_vec={10,20,30};vector<int>copy_vec1=src_vec;// 赋值拷贝vector<int>copy_vec2(src_vec);// 构造函数拷贝// 4. 范围初始化array<int,5>arr={1,2,3,4,5};vector<int>vec7(arr.begin(),arr.end());// 从array初始化vector<int>vec8(vec7.begin()+1,vec7.end()-1);// 截取vector部分范围intraw_arr[]={100,200,300};vector<int>vec9(raw_arr,raw_arr+3);// 从原生数组初始化// 5. 移动初始化(C++11+)vector<int>vec10=std::move(vector<int>{1,2,3});// 移动临时vectorvector<int>src_move={4,5,6};vector<int>vec11=std::move(src_move);// 移动已有vector// 6. 空初始化(默认构造)vector<int>vec12;// 空vector,大小/容量均为0return0;}

细心的读者发现,上面的代码中有一个string,别急,接下来就开始对容器string进行解释,string是一种与vector相似的容器,但是其专门用于保存字符串,其随机访问快。在尾部插入或删除速度快。另外string不止可以作为容器,还可以作为一种规定的数据类型,上面vector的内容中就利用了这一点。
对于string的常见初始化如下:

#include<string>usingnamespacestd;intmain(){// 1. 空初始化(默认构造)string str1;// 空字符串,长度0// 2. 常量字符串初始化(最常用)string str2="Hello C++";// 标准赋值初始化stringstr3("Hello World");// 构造函数初始化string str4{"Hello Python"};// C++11+统一初始化// 3. 拷贝初始化string src_str="test";string str5=src_str;// 赋值拷贝(深拷贝)stringstr6(src_str);// 构造函数拷贝// 4. 指定长度+字符初始化stringstr7(5,'a');// 长度5,所有字符为'a' → "aaaaa"stringstr8(3,'8');// 长度3,所有字符为'8' → "888"// 5. 范围初始化(从string/字符数组截取部分)stringstr9(str2.begin(),str2.begin()+5);// 截取str2前5个字符 → "Hello"charchar_arr[]="123456";stringstr10(char_arr,char_arr+4);// 截取字符数组前4个 → "1234"// 6. 移动初始化(C++11+,高效)string str11=std::move(string("temp"));// 移动临时stringstring src_move="move test";string str12=std::move(src_move);// 移动已有string(原string变空)// 7. 数字/其他类型转string(C++11+)string str13=to_string(123);// 整数转string → "123"string str14=to_string(3.1415);// 浮点数转string → "3.141500"return0;}

又有细心的读者会发现上面的代码有一个char类型用于初始化string类型,实际上string中有这样一种规定:char可以被转化为string类型,反过来则不行。(除非是提取出string中的单个字符才可以完成转换。)

总结

`C++中的顺序容器为程序员提供了控制元素存储和访问顺序的能力,这一节我们讲了关于array、vector和string三个基本的顺序容器的初始化、类型以及特点,下期我会对另外的三个顺序容器进行讲解,感兴趣的读者可以关注一下,如果我的内容对你有帮助和启发,请点赞、评论、收藏。你们的支持就是我更新最大的动力,那么我们下期再见!

http://www.jsqmd.com/news/145726/

相关文章:

  • 以代码作舟,深耕技术蓝海 —— 我的2025博客创作成长之路
  • Django项目nginx转uWSGI问题
  • 如何用BJT实现开关电路:实战案例(新手友好)
  • PaddlePaddle镜像如何实现模型冷启动性能压测?基准测试方案
  • PaddlePaddle开源框架实测:工业级模型库如何提升开发效率?
  • ESP32开发项目应用:Arduino IDE构建Web服务器实战
  • PaddlePaddle模型压缩技术:轻量化部署降低Token与算力开销
  • BRAM与外部存储接口协同验证方法:实战案例
  • 小红书下载神器:3分钟快速上手免费开源工具
  • 新手教程:在ESP32上实现‘是/否’语音分类任务
  • PaddlePaddle自定义数据集训练全流程:GPU加速实操演示
  • 小红书下载神器XHS-Downloader:一键搞定无水印素材批量下载
  • PaddlePaddle人脸关键点检测:美颜APP核心技术揭秘
  • java中接口类的知识点介绍
  • ESP32教程之Wi-Fi UDP通信从零实现
  • PaddlePaddle镜像中的梯度裁剪(Clip Gradient)阈值设定建议
  • ESP32-CAM图传过程中内存溢出问题的根源与解决指南
  • 继电器模块电路图设计:Arduino兼容版完整指南
  • 解决USB-Serial Controller找不到驱动:基于CH340芯片的实战案例
  • ViGEmBus虚拟手柄驱动:游戏控制器兼容性终极解决方案
  • PaddleOCR性能优化秘籍:GPU加速让文本识别快如闪电
  • PaddleNLP大模型实战:中文情感分析如何节省Token消耗?
  • 小红书链接解析技术解析与应用实践
  • PaddlePaddle镜像能否运行BEiT做图像掩码重建?
  • PaddlePaddle镜像中的位置前馈网络(Position-wise FFN)优化
  • 小红书素材保存难题的智能解决方案:XHS-Downloader深度使用指南
  • Mermaid.js图表绘制终极指南:从入门到精通的完整可视化解决方案
  • E7Helper如何通过五大智能模块彻底改变第七史诗的游戏体验?
  • esp32开发环境搭建实战案例:基于Arduino IDE的手把手教学
  • PaddlePaddle镜像如何实现模型灰度切换?双版本并行运行