文章目录

  • 测试环境
  • vector介绍
  • 头文件
  • 模块类定义
  • 对象构造
  • 初始化
  • 元素访问
  • 元素插入和删除
  • 容器大小
  • 迭代器
  • 其他函数

测试环境

系统:ubuntu 22.04.2 LTS 64位
gcc版本:11.3.0
编辑器:vsCode 1.76.2

vector介绍

  1. vector是封装的动态数组序列式容器。
  2. 元素的在内存中的存储地址连续。
  3. 通常vector所占用内存的大小比其中元素占用的内存要大。
  4. 支持随机访问
  5. 在尾部删除插入元素的时间复杂度为O(1),在其他位置插入删除元素时间复杂度根据元素所在位置到结尾的距离成O(n)。

头文件

#include <vector>

模块类定义

_Tp:表示存储的元素数据类型
_Alloc:表示所存储分配器的类型,负责元素内存的分配和释放。可选参数,一般不使用。

template <typename _Tp, typename _Alloc = std::allocator<_Tp> > class vector {};

对象构造

/*默认构造函数,没有元素*/
std::vector<int> vctInt1;;
/*构造指定长度的对象,含有10个元素默认为0*/
std::vector<int> vctInt2(10);
/*构造指定长度的指定值的对象,还有10个6*/
std::vector<int> vctInt3(10,6);
/*复制拷贝构造函数,含有10个6*/
std::vector<int> vctInt4(vctInt3);
/*使用vctInt3的前7个元素构造对象*/
std::vector<int> vctInt5(vctInt3.begin(),vctInt3.begin()+7);
/*移动构造函数,构造后vctInt5不可在使用*/
std::vector<int> vctInt6(std::move(vctInt5));

初始化

/*初始化列表初始化*/
vctInt1 = {1,2,3,4,5};
/*使用assign函数初始化,清空容器,并使用迭代器进行赋值*/
vctInt1.assign(vctInt6.cbegin(), vctInt6.cend());
/*赋值5个8*/
vctInt1.assign(5,8);
/*assign中使用初始化列表赋值*/
vctInt1.assign({8,7,6,5,4,3,2,1});

元素访问

函数名 返回值 功能
[] 指定元素的值 访问元素
at() 指定元素的引用 访问元素
front() 首元素的引用 获取首元素
back() 元素的引用 获取末尾元素
data() 首元素的地址 获取指向首元素的指针
/* 使用下标运算符访问元素并赋值 */
for (int i = 0; i < 10; i++)
{std::cout<< vctInt3[i] << " ";
}
/* 使用at访问元素并赋值 */
for (int i = 0; i < 10; i++)
{std::cout << vctInt3.at(i) << " ";
}
/* 访问对象第一个元素和最后一个元素 */
std::cout << vctInt3.front() << " " << vctInt3.back() << std::endl;
/* 获取指向首元素的指针 */
int *p = vctInt3.data();
std::cout<< *p << std::endl;

元素插入和删除

函数 返回值 功能
clear() 清空所有元素
erase() 迭代器 清除指定位置的一个元素或通过迭代器指定范围内的元素
emplace() 迭代器 在指定位置插入元素
emplace_back() 在末尾拆插入元素
insert() 迭代器或无 1)在指定位置插入1个元素。2)在指定位置插入指定数量的相同元素。3)通过指定迭代器范围在指定位置插入数据
pop_back() 删除末尾元素
push_back() 在末尾添加元素
/*在末尾插入元素*/
vctTest1.push_back(66);
/*指定位置插入元素*/
vctTest1.emplace(vctTest1.begin()+2, 20);
/*指定位置插入元素*/
vctTest1.emplace_back(20);
/*在指定位置插入元素*/
vctTest1.insert(vctTest1.begin(),66);
/*在指定位置插入指定数量的相同数据*/
vctTest1.insert(vctTest1.begin()+4,3,8);
/*在指定位置通过插入指定迭代器范围之间的数据*/
vctTest1.insert(vctTest1.begin(),  vctTest3.begin(), vctTest3.end());
/*删除末尾元素*/
vctTest1.pop_back();
/* 清除指定位置的一个元素 */
vctTest1.erase(vctTest1.begin());
/* 清除从指定位置范围内的元素 */
vctTest1.erase(vctTest1.begin(), vctTest1.begin()+3);
/*清空所有元素*/
vctInt2.clear();

容器大小

函数 返回值 功能
capacity() std::size_t 获取当前容器能容纳元素的最大数量(不重新分配内存的情况下)
size() std::size_t 获取当前容器中的元素数量
empty() bool 判断当前容器是否为空,为空返回true,否则返回false
max_size() std::size_t 返回容器的最大容量
reserve() 设置容器最小可容纳的元素数量
resize() 重新指定容器可以容纳的元素数量,新大小大于原本大小时超出部分可使用指定元素填充,如果新大小小于指定大小时会删除容器原本末尾的数据。
shrink_to_fit() 丢弃容器中多余的容量。
/*判断容器是否为空*/
std::cout << std::boolalpha << vctTest1.empty() << std::endl;
/*设置容器最小可以容纳的元素数量*/
vctTest1.reserve(15);
/*获取容器未重新分配内存时的最大容量*/
std::cout << vctTest1.capacity() << std::endl;
/*重新设置容器的大小*/
vctTest1.resize(30);
/*获取容器未重新分配内存时的最大容量*/
std::cout << vctTest1.capacity() << std::endl;
/*删除容器中的多余容量*/
vctTest1.shrink_to_fit();
/*获取容器未重新分配内存时的最大容量*/
std::cout << vctTest1.capacity() << std::endl;
/*获取容器最大可分配的容量大小*/
std::cout << vctTest1.max_size() << std::endl;
/*获取当前容器中的元素数量*/
std::cout << vctTest1.size() << std::endl;

迭代器

类型 功能
iterator 正向随机访问迭代器。从前向后访问元素,可以读取也可以修改
const_iterator 常量正向随机访问迭代器。从前向后访问元素,只能读取不能修改
reverse_iterator 逆向随机访问迭代器。从后向前访问元素,可以读取也可以修改
const_reverse_iterator 常量逆向随机访问迭代器。从后向前访问元素,只能读取不能修改
函数 返回值 功能
begin() 正向随机访问迭代器 返回指向vector对象首元素所在位置的迭代器
end() 正向随机访问迭代器 返回指向vector对象末尾元素的下一个位置的迭代器
cbegin() 常量正向随机访问迭代器 返回指向vector对象首元素所在位置的常量迭代器
cend() 常量正向随机访问迭代器 返回指向vector对象末尾元素的下一个位置的迭代器
rbegin() 逆向随机访问迭代器 返回指向vector对象末尾元素位置的迭代器
rend() 逆向随机访问迭代器 返回指向vector对象首元素的前一个位置的迭代器
crbegin() 常量逆向随机访问迭代器 返回指向vector对象末尾元素位置的常量迭代器
crend() 常量逆向随机访问迭代器 返回指向vector对象首元素的前一个位置的常量迭代器
std::vector<int>vctTest1({10,11,12,13,14,15,16,17,18,19});
/*正向随机访问迭代器,每个元素+10,并打印输出(20 21 22 23 24 25 26 27 28 29)*/
std::vector<int>::iterator itr;
for (itr = vctTest1.begin(); itr != vctTest1.end(); itr++)
{/* 修改元素值每个元素+10 */*itr += 10; /* 访问元素 */std::cout << *itr << " ";
}
std::cout<<std::endl;
/*常量正向随机访问迭代器,并打印输出(20 21 22 23 24 25 26 27 28 29)*/
std::vector<int>::const_iterator cItr;
for (cItr = vctTest1.begin(); cItr != vctTest1.end(); cItr++)
{/* 不允许修改值,编译报错 *///*cItr += 10; /* 访问元素 */std::cout << *cItr << " ";
}
std::cout<<std::endl;
/*逆向随机访问迭代器,每个元素+100,并打印输出(129 128 127 126 125 124 123 122 121 120)*/
std::vector<int>::reverse_iterator rItr;
for (rItr= vctTest1.rbegin(); rItr!= vctTest1.rend(); rItr++)
{/* 修改元素值 */*rItr += 100; /* 访问元素 */std::cout << *rItr << " ";
}
std::cout<<std::endl;/*常量逆向随机访问迭代器,并打印输出(129 128 127 126 125 124 123 122 121 120)*/
std::vector<int>::const_reverse_iterator crItr;
for (crItr= vctTest1.crbegin(); crItr!= vctTest1.crend(); crItr++)
{/* 不允许修改元素值, 编译报错 *///*crItr += 100; /* 访问元素 */std::cout << *crItr << " ";
}

其他函数

函数名 返回值 功能
swap() 交换两个容器的元素
/*交互两个容器元素的值,无返回值*/
std::vector<int> vctSwap1 = {6,6,6,6,6};
std::vector<int> vctSwap2 = {8,8,8,8,8};
/*方式1, vctSwap1={8,8,8,8,8}, vctSwap2={6,6,6,6,6}*/
vctSwap1.swap(vctSwap2);
/*方式2,vctSwap1={6,6,6,6,6}, vctSwap2={8,8,8,8,8}*/
std::swap(vctSwap1,vctSwap2);

STL容器之<vector>相关推荐

  1. c++STL容器的Vector

    STL容器的Vector Vector容器简介 vector对象的默认构造 vector对象的带参数构造 vector的赋值 vector的大小 vector末尾的添加移除操作 vector的数据存取 ...

  2. string类的erase函数属于stl吗_探索STL容器:vector

    用了这么久的 vector ,今天终于有时间来看下STL的实现源码了,开心?~ 最近几个月在刷 leetcode ,用的较多的数据结构就是STL里面的 vector 了,相比较于直接的 array 数 ...

  3. MFC中STL容器中Vector,List,Map基本用法汇总

    容器就是数据结构的泛指,迭代器就是指针的泛指,可以指向元素.它可以用来存储数据,就比如杯子用来装水一样.而STL中的容器有很多,它包括vector,list,map,deque,set等.我就简单列举 ...

  4. STL容器板子(vector篇)

    一.STL的诞生 (1)长久以来,软件界一直希望建立一种可重复利用的东西 (2)C++的面向对象和泛型编程思想,日的就是复用性的提升 (3)大多情况下,数据结构和算法都未能有一套标准,导致被迫从事大量 ...

  5. C++ STL函数库 vector(henu.hjy)

    我们需要明白vector这是个什么?? 答:通俗而言--一个长度根据所需自动改变的数组,同时还可以用于以邻接表的方式进行存储图 使用前提: 头文件#include <vector> 使用C ...

  6. C++ STL: 容器vector源码分析

    文章目录 前言 vector的核心接口 vector push_back实现 vector 的 Allocator vector 的 push_back 总结 前言 vector 是我们C++STL中 ...

  7. c++ stl容器vector删除(erase),遍历等基本用法介绍及头文件

    Vectors 包含着一系列连续存储的元素,其行为和数组类似.访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线 ...

  8. 【小白学习C++ 教程】二十一、C++ 中的STL容器Arrays和vector

    @Author:Runsen C++的标准模板库(STL)是提供数组.向量.队列等数据结构的模板类的集合.STL是由容器.算法.迭代器组成的库. 容器 容器存储对象和数据.它们基本上是基于模板的泛型类 ...

  9. STL容器及其简单应用(stack、priority_queue、vector、deuqe、list、map/multimap、set/multiset)

    目录 前言 [1]stack操作以及应用 stack的几个核心接口 利用stack完成进制转换 [2]priority_queue操作以及应用 priority_queue的几个核心接口 利用prio ...

  10. vector 清空 Linux,STL容器vector基础用法小结

    STL容器vector基础用法小结根据<ACM程序设计>写的,用实例展示vector用法. 方法:push_back(), insert(), erase(), clear(), size ...

最新文章

  1. 谈谈MySQL的异常处理
  2. 宝塔同时安装苹果cms海洋cms_★苹果cms常见问题有哪些?100个常见问题的解决方法...
  3. Google DeepMind围棋程序AlphaGo的分析
  4. [gic]-linux和optee的中断处理流程举例(gicv3举例)
  5. 杭电1166敌兵布阵
  6. 用Emacs进行Java开发
  7. 产品观念:更好的捕鼠器_故事很重要:为什么您需要成为更好的讲故事的人
  8. 10个高效Linux技巧及Vim命令对比
  9. ACM-ICPC 2018 沈阳赛区现场赛 K. Let the Flames Begin (约瑟夫环问题)
  10. Perl 标量的操作符
  11. pbootcms模板忘记后台密码怎么办?
  12. 论文笔记:CLOCs: Camera-LiDAR Object Candidates Fusion for 3D Object Detection
  13. 咬文嚼字撕下抖音背后虚伪的面纱
  14. 计算机每次关机需要配置,电脑一键关机怎么设置 电脑关机一步到位设置教程...
  15. 【转载】我到底该不该继续交社保?
  16. SWUSTOJ #954 单链表的链接
  17. 技术分享:用JS实现的3D海浪涌动特效
  18. 2020年3月22日总结
  19. 超详细maven的卸载、重新安装与配置
  20. Qt计算器——功能完整的计算器

热门文章

  1. 深入剖析H.264帧间预测(P宏块)
  2. BUUCTF_Crypto_keyboard
  3. 有哪些比较好用的洗地机推荐?家用洗地机品牌排行榜前十名推荐
  4. 二手房买卖中介佣金降0.5% 相关费用总额降80%
  5. 如何使用Global Mapper提取一条线的高程值
  6. 【调剂】华侨大学计算机学院计算机视觉与模式识别实验室钟必能课题组研究生招生...
  7. 全局安装 Angular CLI
  8. 1 如何查看文件后缀名(全)
  9. javax.mail 阿里云服务器使用163邮箱发送邮件
  10. Xcode Cloud