MFC使用笔记-vector

因为vector使用的的连续的内存,带来的一些影响:

一、erase(nPos)函数

  • 开启循环,将nPos位元素后的元素依次复制给前一位,并删除最后一位元素;
  • 元素复制调用元素自身的“=”运算符;
  • for循环中调用时,要特别留意变量的范围;
  • 结论:复杂元素向量,尽量避免调用,若不需要支持随机读取改用list可能更合适;

二、push_back()函数

  • vector新建时会在预留一些空元素的内存空间,但是不可访问;
  • 第一次调用push_back()时,新元素被直接复制进这个内存中,vector原长度+1;
  • 连续调用push_back()超过预留内存空间时,重新创建比原先更长的内存空间,将原来的元素和两个新添加元素逐一复制进新的内存。再预留一些空元素的内存空间,不可访问。最后释放原内存空间;
  • 元素复制调用元素自身的“=”运算符;
  • 结论:若能提前确定vector长度,尽量提前声明元素需求的个数;

三、声明元素个数函数函数有两个:resize(n),reserve(n)

  • resize(n):设定元素实例为n个。若原vector元素不足n个时,新建不足个数的默认初始元素;若原vector元素超过n个时,删除超出部分的元素,但保留已经分配出去的内存;
  • reserve(n):设定元素内存空间需求为n个。若原vector内存空间不足n个时,补充不足个数的内存空间;若原vector内存空间超过n个时,函数不生效;
  • resize(n)新建出的元素可以直接访问;reserve(n)新建出的内存空间不可以,但是用push_back()新增元素时,不会引起内存重新分配。

你可能感兴趣的:(C++)