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:19:24

java中接口类的知识点介绍

Java 接口知识点介绍在 Java 中&#xff0c;接口&#xff08;Interface&#xff09; 是一种抽象类型&#xff0c;用于定义一组方法的规范&#xff08;方法签名&#xff09;&#xff0c;不包含方法的具体实现&#xff08;Java 8 及以后支持默认方法和静态方法的实现&#xff09;…

作者头像 李华
网站建设 2026/4/15 20:32:01

ESP32-CAM图传过程中内存溢出问题的根源与解决指南

ESP32-CAM图传为何频频崩溃&#xff1f;一文讲透内存溢出的根源与实战解决方案你有没有遇到过这样的场景&#xff1a;刚把ESP32-CAM通电&#xff0c;摄像头开始工作&#xff0c;手机App上能看到清晰的画面——一切看起来都那么美好。可几秒钟后&#xff0c;设备突然重启&#x…

作者头像 李华
网站建设 2026/4/15 23:43:46

PaddlePaddle自动化训练流水线:CI/CD集成最佳方案

PaddlePaddle自动化训练流水线&#xff1a;CI/CD集成最佳实践 在AI模型迭代速度决定业务竞争力的今天&#xff0c;一个常见的痛点是&#xff1a;算法工程师提交了新的训练代码后&#xff0c;往往要等半天才知道是否跑通——环境报错、依赖缺失、精度下降……这类问题反复出现&a…

作者头像 李华
网站建设 2026/4/10 22:31:29

工业4.0背景下eSPI的角色与价值:快速理解

eSPI&#xff1a;工业4.0时代的通信“瘦身革命”你有没有遇到过这样的工控主板设计场景&#xff1f;一个嵌入式控制器&#xff08;EC&#xff09;要和主CPU通信&#xff0c;光是电源管理信号就占了十几根GPIO&#xff1a;SLP_S3#、SUS_STAT#、PLTRST#……再加上IC读温度、SPI取…

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

Arduino小车爬坡动力优化:实战案例从零实现

让Arduino小车征服斜坡&#xff1a;从动力不足到稳定爬坡的实战全解析你有没有遇到过这样的场景&#xff1f;精心搭建的Arduino小车在平地上跑得飞快&#xff0c;可一碰到斜坡就“喘粗气”——速度骤降、轮子空转&#xff0c;甚至直接趴窝不动。这不仅是初学者常见的困扰&#…

作者头像 李华