[TOC](C: vector (1))哈喽编程搭子们 又到了沉浸式敲代码的快乐时间把生活调成「代码模式」带着满满的热爱钻进编程的奇妙世界——今天也要敲出超酷的代码冲鸭✨ 我的博客主页喜欢吃燃面 我的专栏持续更新ing《C语言》 |《C语言之数据结构》 |《C》 |《Linux学习笔记》 超感谢你点开这篇博客真心希望这些内容能帮到正在打怪升级的你如果有任何想法、疑问或者想交流学习心得都欢迎留言/私信咱们一起在编程路上互相陪伴、共同进步呀本文思维导图C vector基本使用构造析构迭代器容量操作元素访问修改操作emplace_back直接构造避免拷贝性能更优遍历方式迭代器范围for结构化绑定一、vector的基本使用1. 成员函数1.1 成员函数 (Member functions)函数名功能说明 (中文)(constructor)构造 vector公有成员函数(destructor)vector 析构函数公有成员函数operator赋值内容公有成员函数1.2 迭代器 (Iterators)函数名功能说明 (中文)begin返回指向起始位置的迭代器公有成员函数end返回指向末尾位置的迭代器公有成员函数rbegin返回指向反向起始位置的反向迭代器公有成员函数rend返回指向反向末尾位置的反向迭代器公有成员函数cbegin返回指向起始位置的 const 迭代器公有成员函数cend返回指向末尾位置的 const 迭代器公有成员函数crbegin返回指向反向起始位置的 const 反向迭代器公有成员函数crend返回指向反向末尾位置的 const 反向迭代器公有成员函数1.3 容量 (Capacity)函数名功能说明 (中文)size返回元素个数公有成员函数max_size返回可容纳的最大元素个数公有成员函数resize改变容器大小公有成员函数capacity返回当前已分配的存储容量大小公有成员函数empty测试 vector 是否为空公有成员函数reserve请求改变容器的容量公有成员函数shrink_to_fit收缩至合适大小公有成员函数以上是 C 标准库中 std::vector 容器的成员函数、迭代器、容量相关接口说明属于 C 编程知识里 STL标准模板库的内容以下是关键信息梳理成员函数负责 vector 对象的创建、销毁、赋值构造函数创建 vector 对象析构函数销毁对象释放内存资源operator赋值运算符实现容器间内容拷贝迭代器用于遍历 vector 元素的工具分两类正向迭代器begin起始、end结束反向迭代器rbegin反向起始、rend反向结束const 迭代器cbegin/cend/crbegin/crend只读遍历禁止修改元素容量管理 vector内存大小与元素数量size获取当前元素个数max_size理论最大可存储元素数resize调整容器内元素个数capacity已分配内存可容纳元素总数empty判断容器是否为空reserve预分配内存优化扩容效率shrink_to_fit收缩内存至实际元素占用大小2.常用方法2.1 元素访问 (Element access)函数名功能说明 (中文)operator[]访问元素公有成员函数at访问元素公有成员函数带越界检查front访问第一个元素公有成员函数back访问最后一个元素公有成员函数data访问底层数据指针公有成员函数2.2 修改器 (Modifiers)函数名功能说明 (中文)assign赋值 vector 内容公有成员函数push_back在末尾添加元素公有成员函数pop_back删除末尾元素公有成员函数insert插入元素公有成员函数erase擦除元素公有成员函数swap交换内容公有成员函数clear清空内容公有成员函数emplace构造并插入元素公有成员函数emplace_back在末尾构造并插入元素公有成员函数2.3 分配器 (Allocator)函数名功能说明 (中文)get_allocator获取分配器公有成员函数2.4 非成员函数重载 (Non-member function overloads)函数名功能说明 (中文)relational operatorsvector 的关系运算符函数模板swap交换两个 vector 的内容函数模板以上是是 C 标准库中 std::vector 容器的部分成员函数及相关操作说明涵盖以下类别元素访问Element accessoperator[]通过下标访问元素不做越界检查 。at通过下标访问元素会做越界检查越界抛 out_of_range 异常 。front访问第一个元素 。back访问最后一个元素 。dataC11 及以上 返回指向容器数据起始位置的指针用于直接操作底层数据 。修改操作Modifiersassign重新赋值容器内容可替换现有元素 。push_back在容器末尾添加元素 。pop_back删除容器末尾元素 。insert在指定位置插入元素 。erase删除指定位置元素 。swap交换两个 vector 的内容 。clear清空容器元素 。emplaceC11 及以上 在指定位置直接构造并插入元素减少拷贝/移动开销 。emplace_backC11 及以上 在末尾直接构造并插入元素 。分配器Allocatorget_allocator获取容器使用的分配器用于内存管理相关操作 。非成员函数重载Non - member function overloadsrelational operatorsvector 的关系运算符重载如 、 等 用于比较两个 vector 。swap非成员函数版 swap交换两个 vector 内容可通过 ADL参数依赖查找 调用 。以上这些是 std::vector 常用的操作接口用于元素访问、增删改、内存与内容管理等场景 。3. 示例代码如下#includeiostream#includestring#includevectorusingnamespacestd;voidtest01(){vectorintv1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);vectorint::iterator itv1.begin();while(itv1.end()){cout*itendl;it;}coutendl;vectorintv2(4,2);for(autoe:v2){coute ;}coutendl;vectorintv3(v1.begin(),v1.end());for(inti0;iv3.size();i){coutv3[i] ;}coutendl;}voidtest02(){vectorintv;size_t oldv.capacity();for(inti0;i110;i){v.push_back(i);if(old!v.capacity()){coutv.capacity()endl;oldv.capacity();}}coutendl;vectorintv1{1,2,3,4,5,6,7,8};v1.insert(v1.begin(),100);v1.insert(v1.begin()2,66);autoposstd::find(v1.begin(),v1.end(),5);if(posv1.end()){v1.insert(pos,77);}for(autoe:v1){coute ;}coutendl;v1.erase(v1.begin()5);v1.erase(v1.begin()3,v1.end());for(autoe:v1){coute ;}coutendl;}intmain(){test01();test02();return0;}4.结果展示注不同编译器运行结果可能存在差异二.emplace_back与遍历补充emplace_back是 C 容器如vector的函数用于直接在容器尾部构造对象避免额外的拷贝或移动操作。相比push_back需先构造对象再添加到容器它更高效尤其适用于构造复杂对象或性能敏感场景。在多数情况下emplace_back与push_back差别不大。请看以下代码#includeiostream#includevectorusingnamespacestd;voidtest01(){structA{A(inta11,inta21):_a1(a1),_a2(a2){}int_a1;int_a2;};Aaa1(0,0);vectorAv;v.push_back(aa1);v.push_back(A(2,2));v.push_back({3,2});v.emplace_back(aa1);v.emplace_back(A(2,2));//传构造参数效率较高v.emplace_back(3,2);vectorA::iterator itv.begin();while(itv.end()){coutit-_a1 it-_a2;it;}coutendl;for(autoe:v){coute._a1 e._a2;}coutendl;//C17标准 结构化绑定auto[x,y]aa1;for(auto[x,y]:v){coutx y;}}intmain(){test01();return0;}运行结果如下
C++:vector(1)
发布时间:2026/5/19 1:38:10
[TOC](C: vector (1))哈喽编程搭子们 又到了沉浸式敲代码的快乐时间把生活调成「代码模式」带着满满的热爱钻进编程的奇妙世界——今天也要敲出超酷的代码冲鸭✨ 我的博客主页喜欢吃燃面 我的专栏持续更新ing《C语言》 |《C语言之数据结构》 |《C》 |《Linux学习笔记》 超感谢你点开这篇博客真心希望这些内容能帮到正在打怪升级的你如果有任何想法、疑问或者想交流学习心得都欢迎留言/私信咱们一起在编程路上互相陪伴、共同进步呀本文思维导图C vector基本使用构造析构迭代器容量操作元素访问修改操作emplace_back直接构造避免拷贝性能更优遍历方式迭代器范围for结构化绑定一、vector的基本使用1. 成员函数1.1 成员函数 (Member functions)函数名功能说明 (中文)(constructor)构造 vector公有成员函数(destructor)vector 析构函数公有成员函数operator赋值内容公有成员函数1.2 迭代器 (Iterators)函数名功能说明 (中文)begin返回指向起始位置的迭代器公有成员函数end返回指向末尾位置的迭代器公有成员函数rbegin返回指向反向起始位置的反向迭代器公有成员函数rend返回指向反向末尾位置的反向迭代器公有成员函数cbegin返回指向起始位置的 const 迭代器公有成员函数cend返回指向末尾位置的 const 迭代器公有成员函数crbegin返回指向反向起始位置的 const 反向迭代器公有成员函数crend返回指向反向末尾位置的 const 反向迭代器公有成员函数1.3 容量 (Capacity)函数名功能说明 (中文)size返回元素个数公有成员函数max_size返回可容纳的最大元素个数公有成员函数resize改变容器大小公有成员函数capacity返回当前已分配的存储容量大小公有成员函数empty测试 vector 是否为空公有成员函数reserve请求改变容器的容量公有成员函数shrink_to_fit收缩至合适大小公有成员函数以上是 C 标准库中 std::vector 容器的成员函数、迭代器、容量相关接口说明属于 C 编程知识里 STL标准模板库的内容以下是关键信息梳理成员函数负责 vector 对象的创建、销毁、赋值构造函数创建 vector 对象析构函数销毁对象释放内存资源operator赋值运算符实现容器间内容拷贝迭代器用于遍历 vector 元素的工具分两类正向迭代器begin起始、end结束反向迭代器rbegin反向起始、rend反向结束const 迭代器cbegin/cend/crbegin/crend只读遍历禁止修改元素容量管理 vector内存大小与元素数量size获取当前元素个数max_size理论最大可存储元素数resize调整容器内元素个数capacity已分配内存可容纳元素总数empty判断容器是否为空reserve预分配内存优化扩容效率shrink_to_fit收缩内存至实际元素占用大小2.常用方法2.1 元素访问 (Element access)函数名功能说明 (中文)operator[]访问元素公有成员函数at访问元素公有成员函数带越界检查front访问第一个元素公有成员函数back访问最后一个元素公有成员函数data访问底层数据指针公有成员函数2.2 修改器 (Modifiers)函数名功能说明 (中文)assign赋值 vector 内容公有成员函数push_back在末尾添加元素公有成员函数pop_back删除末尾元素公有成员函数insert插入元素公有成员函数erase擦除元素公有成员函数swap交换内容公有成员函数clear清空内容公有成员函数emplace构造并插入元素公有成员函数emplace_back在末尾构造并插入元素公有成员函数2.3 分配器 (Allocator)函数名功能说明 (中文)get_allocator获取分配器公有成员函数2.4 非成员函数重载 (Non-member function overloads)函数名功能说明 (中文)relational operatorsvector 的关系运算符函数模板swap交换两个 vector 的内容函数模板以上是是 C 标准库中 std::vector 容器的部分成员函数及相关操作说明涵盖以下类别元素访问Element accessoperator[]通过下标访问元素不做越界检查 。at通过下标访问元素会做越界检查越界抛 out_of_range 异常 。front访问第一个元素 。back访问最后一个元素 。dataC11 及以上 返回指向容器数据起始位置的指针用于直接操作底层数据 。修改操作Modifiersassign重新赋值容器内容可替换现有元素 。push_back在容器末尾添加元素 。pop_back删除容器末尾元素 。insert在指定位置插入元素 。erase删除指定位置元素 。swap交换两个 vector 的内容 。clear清空容器元素 。emplaceC11 及以上 在指定位置直接构造并插入元素减少拷贝/移动开销 。emplace_backC11 及以上 在末尾直接构造并插入元素 。分配器Allocatorget_allocator获取容器使用的分配器用于内存管理相关操作 。非成员函数重载Non - member function overloadsrelational operatorsvector 的关系运算符重载如 、 等 用于比较两个 vector 。swap非成员函数版 swap交换两个 vector 内容可通过 ADL参数依赖查找 调用 。以上这些是 std::vector 常用的操作接口用于元素访问、增删改、内存与内容管理等场景 。3. 示例代码如下#includeiostream#includestring#includevectorusingnamespacestd;voidtest01(){vectorintv1;v1.push_back(1);v1.push_back(2);v1.push_back(3);v1.push_back(4);vectorint::iterator itv1.begin();while(itv1.end()){cout*itendl;it;}coutendl;vectorintv2(4,2);for(autoe:v2){coute ;}coutendl;vectorintv3(v1.begin(),v1.end());for(inti0;iv3.size();i){coutv3[i] ;}coutendl;}voidtest02(){vectorintv;size_t oldv.capacity();for(inti0;i110;i){v.push_back(i);if(old!v.capacity()){coutv.capacity()endl;oldv.capacity();}}coutendl;vectorintv1{1,2,3,4,5,6,7,8};v1.insert(v1.begin(),100);v1.insert(v1.begin()2,66);autoposstd::find(v1.begin(),v1.end(),5);if(posv1.end()){v1.insert(pos,77);}for(autoe:v1){coute ;}coutendl;v1.erase(v1.begin()5);v1.erase(v1.begin()3,v1.end());for(autoe:v1){coute ;}coutendl;}intmain(){test01();test02();return0;}4.结果展示注不同编译器运行结果可能存在差异二.emplace_back与遍历补充emplace_back是 C 容器如vector的函数用于直接在容器尾部构造对象避免额外的拷贝或移动操作。相比push_back需先构造对象再添加到容器它更高效尤其适用于构造复杂对象或性能敏感场景。在多数情况下emplace_back与push_back差别不大。请看以下代码#includeiostream#includevectorusingnamespacestd;voidtest01(){structA{A(inta11,inta21):_a1(a1),_a2(a2){}int_a1;int_a2;};Aaa1(0,0);vectorAv;v.push_back(aa1);v.push_back(A(2,2));v.push_back({3,2});v.emplace_back(aa1);v.emplace_back(A(2,2));//传构造参数效率较高v.emplace_back(3,2);vectorA::iterator itv.begin();while(itv.end()){coutit-_a1 it-_a2;it;}coutendl;for(autoe:v){coute._a1 e._a2;}coutendl;//C17标准 结构化绑定auto[x,y]aa1;for(auto[x,y]:v){coutx y;}}intmain(){test01();return0;}运行结果如下