假定有 n 个元素,倍增因子为 m; 完成这 n 个元素往一个 vector 中的 push_back操作,需要重新分配内存的次数大约为logmn,就是说如果这n个元素都需要扩容才可以加入,那么最坏的情况下也是需要分配内存的次数是logmn; 第i 次重新分配将会导致复制 mi(也就是当前的vector.size() 大小)个旧空间中元素;n 次 pus...
函数erase()可以删除由一个iterator指向的元素,也可以删除一个指定范围的元素。erase()的用法有多种形式,可以传入一个迭代器指向要删除的元素,或者传入两个迭代器指定要删除的范围。 通用算法remove()并不能直接删除vector容器中的元素。remove()算法是用来移除容器中满足特定条件的元素,并将剩余的元素前移,返回一个...
vector维护的是一个连续线性空间,因此vector迭代器具备普通指针的功能,支持随机存取。 list 相对于vector的连续线性空间,list,与向量(vector)相比, 它允许快速的插入和删除,且每次插入或删除一个元素,就配置或释放一个元素空间。 list不再能够像vector那样以普通指针作为迭代器,因为其节点不保证在储存空间中连续存在。l...
一旦vector 1旧有空间满载,如果客户端每新增一个元素,vector内部只是扩充一个元素的空间,实为不智,因为所谓扩充空间(不论多大),一如稍早所说,是“配置新空间,数据移动,释还旧空间”的大工程,时间成本很高,应该加入某种未雨绸缪的考虑﹑稍后我们便可看到SG vector的空间配置策略。 如下将局部内容进行查看: iterator...
对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器就都失效了。 三、list的底层(存储)机制 以结点为单位存储数据,结点的地址在内存中不一定连续,每次插入或者删除一个元素,就配置或者释放一个元素空间。 四、什么情况下用vector,什么情况下用list ...
vector的随机访问效率高,但在插入和删除时(不包括尾部)需要挪动数据,不易操作。list的访问要遍历整个链表,它的随机访问效率低。但对数据的插入和删除操作等都比较方便,改变指针的指向即可。list是单向的,vector是双向的。vector中的迭代器在使用后就失效了,而list的迭代器在使用之后还可以继续使用。
迭代器失效:扩容会导致之前所有指向vector元素的迭代器、指针和引用失效,因为元素已经被移动到了新的内存位置。 应用场景示例 数据收集:在不断收集数据的应用场景中(如日志记录或实时数据采集),vector可以动态扩容以应对数据量的不断增长。 动态数组功能:在需要动态数组功能的场景中,如游戏开发中的动态实体列表,vector提...
erase():删除传入指针指向的那个元素 clear():清除所有的元素 ==运算符:判断两个容器是否相等 =运算符:用来给容器赋值 上面的三个模板有各自的特点 vector模板的数据在内存中连续的排列,所以随机存取元素(即通过[]运算符存取)的速度最快,这一点和数组是一致的。同样由于它的连续排列,所以它在除尾部以外的位置删...
迭代器:它们都提供迭代器,允许按顺序访问容器中的元素。 元素访问:都允许通过迭代器访问元素,支持常见的元素访问操作,如遍历、搜索等。 不同点: 内存分配:std::vector 通常使用连续的内存块来存储元素,类似于数组。std::list 使用非连续的内存块,每个元素(节点)包含数据和指向前一个和后一个节点的指针,形成链表...