news 2026/4/16 14:21:41

C++顺序容器概述

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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三个基本的顺序容器的初始化、类型以及特点,下期我会对另外的三个顺序容器进行讲解,感兴趣的读者可以关注一下,如果我的内容对你有帮助和启发,请点赞、评论、收藏。你们的支持就是我更新最大的动力,那么我们下期再见!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 14:00:16

PaddlePaddle模型压缩技术:轻量化部署降低Token与算力开销

PaddlePaddle模型压缩技术&#xff1a;轻量化部署降低Token与算力开销 在智能应用从实验室走向产线的今天&#xff0c;一个看似不起眼的“大模型”正在悄悄吞噬企业的成本——不是因为性能不够强&#xff0c;而是因为它太重了。动辄数百MB的体积、对高端GPU的依赖、每秒几十次A…

作者头像 李华
网站建设 2026/4/16 13:35:53

PaddleOCR性能优化秘籍:GPU加速让文本识别快如闪电

PaddleOCR性能优化实战&#xff1a;如何用GPU实现文本识别的极致加速 在金融票据自动录入、物流面单高速扫描、教育答题卡批量阅卷等现实场景中&#xff0c;企业常常面临一个共性难题&#xff1a;成千上万张图像需要在极短时间内完成文字提取。传统的OCR工具在复杂中文环境下不…

作者头像 李华
网站建设 2026/4/15 18:04:12

如何利用PaddlePaddle镜像快速启动计算机视觉项目?

如何利用PaddlePaddle镜像快速启动计算机视觉项目&#xff1f; 在企业数字化转型加速的今天&#xff0c;一个常见的挑战摆在AI工程师面前&#xff1a;如何在两天内为财务部门搭建一套能自动识别发票信息的系统&#xff1f;传统方式下&#xff0c;光是配置Python环境、安装CUDA驱…

作者头像 李华
网站建设 2026/4/16 2:03:35

树莓派5嵌入式Linux系统移植超详细版教程

从零开始&#xff1a;手把手教你完成树莓派5嵌入式Linux系统移植你有没有遇到过这种情况&#xff1f;项目需要一个轻量、可控的Linux系统跑在树莓派5上&#xff0c;但官方的Raspberry Pi OS又太“臃肿”&#xff0c;启动慢、服务多、还关不掉。这时候&#xff0c;自己动手做一套…

作者头像 李华
网站建设 2026/4/16 14:04:06

基于Proteus仿真软件的Arduino温度传感器模拟

基于Proteus的Arduino温度传感系统仿真&#xff1a;从电路搭建到代码验证你有没有过这样的经历&#xff1f;手头没有LM35传感器&#xff0c;DS18B20还没到货&#xff0c;但课程作业明天就要交&#xff1b;或者团队正在开发一个温控系统&#xff0c;却因为硬件反复烧毁而进度停滞…

作者头像 李华
网站建设 2026/4/16 14:04:33

esp32cam视频传输新手教程:从模块接线到网页预览

从零开始玩转 ESP32-CAM&#xff1a;手把手教你搭建本地视频流监控系统 你有没有想过&#xff0c;花不到一杯奶茶的钱&#xff0c;就能做出一个能连 Wi-Fi、实时传输画面的微型摄像头&#xff1f;这不是科幻&#xff0c;而是现在每个电子爱好者都能轻松实现的小项目。今天我们…

作者头像 李华