作者:Leehm

链接:https://www.cnblogs.com/leehm/p/10929756.html

1、初始化

c++ 11以后新增了大括号{}的初始化方式,需要注意与()的区别,如:

std::vector vecTest1(5);         //初始化5个元素,每个都是0

std::vector vecTest2{ 5 };       //初始化1个元素,值是5

2、添加元素:push_back

通过push_back添加新的元素进入vector后,vector的内存有时候会发生变化,这取决于size和capacity大小,当然这些都是系统来处理的,详细可以参考stl源码

当size

当size==capacity的时候,会重新申请另外一块内存,然后copy过去加到尾部,这个时候就会有变化了。

对于stl的容器,都有成员:

begin()  //起始位置

end() //结束位置

size() //当前大小

capacity() //当前容量,即已申请的内存大小

vector是一段连续的内存空间,有三个标识内存的位置,start,end,finish, size=end-start, capacity=finish-start

很多时候在使用vector的时候,会看到size=capacity,这个时候直接添加元素到尾部,内存明显是不够的,此时会重新在别处分配一块大小足够

有时候也有size

std::

3、关于earse和remove

erase返回的是当前删除的元素的一下个位置的迭代器,所以需要注意的是遍历时候的++运算,这个与其它list,map差不多,

需要注意的earse后内存并未真正的清空,仅仅是删除内容,真正的容量大小capacity并没有改变,需要通过swap来实现capacity的减小

全部清空可以考虑:vector().swap(vecNum);

auto itor = vecNum.begin();

//remove只是通过迭代器的指针向前移动来删除,将不需要删除的元素往前移,因此需要删除的就都在尾部了

//返回新的指向尾部需要删除的元素的迭代器

因此还是得配合earse来使用,所以一般真要删除,建议直接遍历使用earse

auto itor = remove_if(vecNum.begin(), vecNum.end(),[](

4、关于vector< bool>  -- 慎用

出处: https://blog.csdn.net/DoronLee/article/details/78462208

vector< bool> 并不是一个STL容器,不是一个STL容器,不是一个STL容器!

首先vector< bool> 并不是一个通常意义上的vector容器,这个源自于历史遗留问题。

早在C++98的时候,就有vector< bool>这个类型了,但是因为当时为了考虑到节省空间的想法,所以vector< bool>里面不是一个Byte一个Byte储存的,它是一个bit一个bit储存的!

因为C++没有直接去给一个bit来操作,

所以用operator[]的时候, 正常容器返回的应该是一个对应元素的引用,

但是对于vector< bool>实际上访问的是一个”proxy reference”而不是一个”true reference”,返回的是”std::vector< bool>:reference”类型的对象。

因此,使用auto自动类型推导时会出现问题

//vector慎用


●编号520,输入编号直达本文

●输入m获取文章目录

C语言与C++编程

分享C/C++技术文章

c++ vector 一部分_C++ vector 使用注意事项相关推荐

  1. c++ vector 一部分_C++逆向学习(二) vector

    此文为原创文章 作者:ret2nullptr@先知社区 恭喜作者获得 价值100元的天猫超市享淘卡一张 欢迎更多优质原创.翻译作者加入 ASRC文章奖励计划 欢迎多多投稿到先知社区 每天一篇优质技术好 ...

  2. c++ vector查找_C++ vector内存分配策略浅析

    (给CPP开发者加星标,提升C/C++技能) 来源:邱国禄https://blog.csdn.net/qiuguolu1108/article/details/107146184 vector是一个封 ...

  3. c++ vector 先进先出_C++ STL Vector(容器)学习

    本文参考博客链接及书籍: 侯捷老师的<STL 源码剖析> 在C++标准库中,STL容器是一些常用数据结构的实现,比如数组.链表.树.栈.队列.散列表.集合.映射表等,可以分为序列式(seq ...

  4. c语言vector+erase用法,vector.erase用法注意事项

    转自->这里 vector::erase():从指定容器删除指定位置的元素或某段范围内的元素 vector::erase()方法有两种重载形式 如下: iterator erase(iterat ...

  5. “vector”: 不是“std”的成员_C++ vector成员函数实现[持续更新]

    此篇是 配合cppreference-zh-20200816.chm学习 <vector>, <stl_vector.h>和<vector.tcc>源码的笔记 环境 ...

  6. c++ vector 赋值_C++中vector用法

    vector是什么 vector是C++标准模板库(STL-Standard Template Library)中的概念内容,它是一个能够操作多种数据结构和算法的模板类和函数库,是一个封装了动态大小数 ...

  7. swap函数_C++ vector成员函数实现[持续更新]

    此篇是 配合cppreference-zh-20200816.chm学习 <vector>, <stl_vector.h>和<vector.tcc>源码的笔记 环境 ...

  8. java vector search_java.util.Vector.retainAll()方法实例

    全屏 retainAll(Collection> c)方法用于仅保留此向量包含在指定Collection的元素.换言之,删除这个向量的所有元素未包含在指定Collection. 声明 以下是ja ...

  9. matlab vector用法,C++ vector 用法汇总

    标准库Vector类型 使用需要的头文件: #include Vector:Vector 是一个类模板.不是一种数据类型. Vector是一种数据类型. 一.  定义和初始化 Vectorv1;    ...

最新文章

  1. SpringBoot 源码解析——如何进行源码环境调试?
  2. 不影响数据库运行如何快速恢复刚删除的表及其数据(二)如何恢复刚才删除的一条数据...
  3. jqgrid常用操作
  4. 【Kafka】kafka 偶然报错 NotLeaderForPartitionException
  5. mac mysql ngram_mac 下 sphinx + mysql + php 实现全文搜索(xampp)(3)sphinx 的配置项解析...
  6. 操作系统实验报告-系统调用
  7. android消息处理机制原理解析
  8. U盘中毒文件被隐藏?U盘中毒了怎么恢复文件
  9. Android快捷开关实现
  10. muParser公式库使用简介( 转)
  11. python写的2048游戏,源代码,pygame
  12. c语言程序设计账单,C语言课程设计——账单管理
  13. R 编程中的 LOOCV(留一法交叉验证)
  14. 有效前沿,CAMP, CAL, SML
  15. 已解决 java.sql.SQLException: 列名无效
  16. 学Python最基本20个代码__1
  17. 【LeetCode】1405-最长快乐字符串
  18. 基于java基于Web的人事管理系统的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署
  19. Word快速删除所有英文、数字或中文
  20. USB 2.0 协议中J、K、SE0状态的定义

热门文章

  1. 语义分割 | segnet 制作自己的数据,如何训练,如何测试,如何评价
  2. 使用webpack打包vue工程
  3. 如何解决每次打开office 都会出现正在配置的问题
  4. 人中急救穴 也可通过辨别疾病
  5. 桌面支持--电脑出现临时账户--解决办法
  6. 新书上市:《FLUENT 14.0超级学习手册》
  7. 视屏接口系列(一 ) ----------VGA(对与数信号显示器要加载A/D,延时拖尾、质量下降)...
  8. 让你更好使用Vista的设置技巧
  9. python中的轻量级定时任务调度库:schedule
  10. 维特比算法—打字输入预测