STL容器 (Stl容器有什么作用)
本文目录导航:
STL容器—deque使用技巧
std::deque是一种双端队列,提供快速在两端插入和删除元素的能力。
与std::vector不同,deque的元素非连续存储,通过一系列分配固定大小的数组实现,同时进行额外的管理。
这意味着访问deque的索引需要两次指针解引用,而vector则只需要一次。
deque的存储会自动根据需要调整大小,扩展比vector便宜,因为它无需复制现有元素到新位置。
然而,deque的内存成本相对较高,即使只存储一个元素,也需要分配整个内部数组(如64位libstdc++中8倍的对象大小;在64位libc++中,可能更大,至少为4096字节)。
在时间复杂度方面,deque在尾部和头部插入和删除的复杂度为O(1),实际上比vector稍慢。
在手动内存清理方面,deque与vector类似,可以使用swap()接口释放内存。
在C++11之后,deque添加了shrink_to_fit()接口,因此也可以手动释放内存。
在选择deque还是vector时,vector通常应作为默认序列类型。
deque在序列大部分插入和删除发生在两端时是最佳选择。
因此,存储大量数据时,我认为使用deque的优先级高于vector,对于少量数据则应尽量使用vector。
有趣的是,标准库中的栈(std::stack)实现默认使用deque,尽管栈只涉及单端数据的插入和删除。

stl中deque怎么读?
在STL库中,deque是一种容器类型,代表双端队列。
deque的发音在英语中存在不同的版本,常见的有 戴克、迪Q、大可 等。
其中,戴克 为全称发音方式,较为严谨。
提问者认为如此读音容易引起误解,因此每次会念出全称 double-ended queue。
实际上,身边人对于deque的读音存在多样化,有人选择简单的 迪Q 或 大可。
这种情况下,主要取决于个人习惯和交流环境,并不会对理解造成实质影响。
在日常编程交流中,直接称呼deque为双端队列更为直接简洁。
在国际交流中,尤其是在编程社区或论坛,不少人仍然倾向于用 deck 这个简化的发音,这反映了英语口语中对于简短发音的偏好。
然而,如果在正式或文档中使用deque,推荐使用全称 double-ended queue 或简称为 deque,以避免不必要的混淆。
综上所述,deque的读音主要取决于个人喜好和交流环境。
在不影响理解的情况下,可以采用简化的读音,如 迪Q 或 大可。
但在正式文档或需要精确表述的场合,建议使用全称 double-ended queue 或缩写 deque。
C++,list,vector,deque有什么区别
Vector:C++容器模板中的大哥大,就像是一个加强版的队列,之所以这样说,是因为它不但有队列形式的索引,还能动态的添加扩充。
特点:把被包含的对象以数组的形式存储,支持索引形式的访问(这种访问速度奇快无比)。
但由此也产生了一个问题,由于数据存储形式的固定化,你如果想在他中间部位insert对象的话,搞不好会让你吃尽头。
因为他在分配空间的时候,可是成块分配的连续空间。
Deque:英文“double-ended-queue”。
名如其人,这是C++有序容器中闻名遐迩的双向队列。
他在设计之初,就为从两端添加和删除元素做了特殊的优化。
同样也支持随即访问,也有类似vector的[]操作符,但不要因此就把他和vector混为一潭。
特点:从本质上讲,他在分配内存的时候,使用了MAP的结构和方法。
化整为零,分配了许多小的连续空间,因此,从deque两端添加、删除元素是十分方便的。
最重要的一点:如果在不知道内存具体需求的时候,使用deque绝对是比vector好的。
List:模板中的双向链表。
设计他的目的可能就是为了在容器中间插入、删除吧,所以有得比有失,他的随机访问速度可不敢恭维。
而且没有[]操作。
特点:随机的插入、删除元素,在速度上占有明显的优势。
并且,由于内存分配不连续,他对插入的要求也十分的低。
所以在使用大对象的时候,这可是一个不错的选择。
“