STL
线上幽灵
大道至简
展开
-
vector和deque的底层区别
1、vector vector概述 vector的数据安排以及操作方式,与array非常相似。两者的唯一差别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细得由客户端自己来:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。...原创 2018-08-16 16:33:39 · 4684 阅读 · 0 评论 -
迭代器失效的几种情况
1、序列式容器 对于序列式容器(如vector,deque),序列式容器就是数组式容器,删除当前的iterator会使后面所有元素的iterator都失效。这是因为vetor、deque使用了连续分配的内存,删除一个元素导致后面所有的元素会向前移动一个位置。所以不能使用erase(iter++)的方式,还好erase方法可以返回下一个有效的iterator。 下面代码迭代器失效: v...转载 2018-08-16 17:16:07 · 1020 阅读 · 0 评论 -
STL中vector的实现原理
STL中vector的实现原理 vector的数据安排以及操作方式,与array非常相似。两者的唯一区别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细都得由客户端自己来:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。因此,ve...原创 2018-10-09 09:01:14 · 2214 阅读 · 0 评论 -
vector删除数据的注意事项
vector删除数据的注意事项? 先用迭代器指向vector的起始位置,然后用while循环,找到符合的元素,删除迭代器所指向的元素,返回一个指向被删元素之后元素的迭代器,这时不能在自增了,因为迭代器指针已经指向下一个元素了,如果在自增,就将被删除的元素的后面一个元素就跳过去了,如果在被删除的元素在末尾,那么迭代器指针就会变成野指针。 ...原创 2018-10-09 09:10:58 · 2043 阅读 · 0 评论 -
C++中map、hash_map、unordered_map、unordered_set的区别
标题中提到的四种容器,对于概念不清的人来说,经常容易弄混淆。这里我不去把库里面复杂的原码拿出剖析,这个如果有兴趣其实完全可以查C++Reference,网上的原码是最权威和细致的了,而且我觉得有耐心直接认真看原码的人,也不需要我这篇速记博文了,所以我这里还是讲的通俗一些,把它们区分的七七八八。 一、hash_map与unordered_map 这两个的内部结构都是采用哈希表来实现。区别在哪里?un...转载 2018-10-17 11:02:41 · 4591 阅读 · 0 评论