商城网站开发网,四川大学官方网站规划建设处,黄埔商城网站建设,石家庄h5网站建设在写C程序的时候会发现STL是一个不错的东西#xff0c;减少了代码量#xff0c;使代码的复用率大大提高#xff0c;减轻了程序猿的负担。还有一个就是容器#xff0c;你会发现要是自己写一个链表、队列#xff0c;或者是数组的时候#xff0c;既要花时间还要操心怎么去维…在写C程序的时候会发现STL是一个不错的东西减少了代码量使代码的复用率大大提高减轻了程序猿的负担。还有一个就是容器你会发现要是自己写一个链表、队列或者是数组的时候既要花时间还要操心怎么去维护里面的指针啊内存够不够用啊长度问题有没有可能溢出啊等等一系列的问题等着我们去解决还是比较头疼的。所以容器的出现解决了这一个问题它将这些数据结构都封装成了一个类只需要加上头文件我们就可以轻松的应用不用那么复杂就连指针也被封装成了迭代器用起来更方便更人性化方便了我们的编程对于程序员来说还是一大福音C中的容器类包括“顺序存储结构”和“关联存储结构”前者包括vectorlistdeque等后者包括setmapmultisetmultimap等。若需要存储的元素数在编译器间就可以确定可以使用数组来存储否则就需要用到容器类了。1、vector连续存储结构每个元素在内存上是连续的支持高效的随机访问和在尾端插入/删除操作但其他位置的插入/删除操作效率低下相当于一个数组但是与数组的区别为内存空间的扩展。vector支持不指定vector大小的存储但是数组的扩展需要程序员自己写。vector的内存分配实现原理STL内部实现时首先分配一个非常大的内存空间预备进行存储即capacity()函数返回的大小当超过此分配的空间时再整体重新放分配一块内存存储(VS6.0是两倍VS2005是1.5倍)所以这给人以vector可以不指定vector即一个连续内存的大小的感觉。通常此默认的内存分配能完成大部分情况下的存储。扩充空间(不论多大)都应该这样做(1)配置一块新空间(2)将旧元素一一搬往新址(3)把原来的空间释放还给系统注vector 的数据安排以及操作方式与array 非常相似。两者的唯一差别在于空间的利用的灵活性。Array 的扩充空间要程序员自己来写。vector类定义了好几种构造函数用来定义和初始化vector对象:vector v1; vector保存类型为T的对象。默认构造函数v1为空。vector v2(v1); v2是v1的一个副本。vector v3(n, i); v3包含n个值为i的元素。vector v4(n); v4含有值初始化的元素的n个副本。2、deque连续存储结构即其每个元素在内存上也是连续的类似于vector不同之处在于deque提供了两级数组结构 第一级完全类似于vector代表实际容器另一级维护容器的首位地址。这样deque除了具有vector的所有功能外还支持高效的首/尾端插入/删除操作。deque 双端队列 double-end queuedeque是在功能上合并了vector和list。优点(1) 随机访问方便即支持[ ]操作符和vector.at()(2) 在内部方便的进行插入和删除操作(3) 可在两端进行push、pop缺点占用内存多使用区别(1)如果你需要高效的随即存取而不在乎插入和删除的效率使用vector(2)如果你需要大量的插入和删除而不关心随机存取则应使用list(3)如果你需要随机存取而且关心两端数据的插入和删除则应使用deque3、list非连续存储结构具有双链表结构每个元素维护一对前向和后向指针因此支持前向/后向遍历。支持高效的随机插入/删除操作但随机访问效率低下且由于需要额外维护指针开销也比较大。每一个结点都包括一个信息快Info、一个前驱指针Pre、一个后驱指针Post。可以不分配必须的内存大小方便的进行添加和删除操作。使用的是非连续的内存空间进行存储。优点(1) 不使用连续内存完成动态操作。(2) 在内部方便的进行插入和删除操作(3) 可在两端进行push、pop缺点(1) 不能进行内部的随机访问即不支持[ ]操作符和vector.at()(2) 相对于verctor占用内存多使用区别(1)如果你需要高效的随即存取而不在乎插入和删除的效率使用vector(2)如果你需要大量的插入和删除而不关心随机存取则应使用list(3)如果你需要随机存取而且关心两端数据的插入和删除则应使用deque4、vector VS. list VS. dequea、若需要随机访问操作则选择vectorb、若已经知道需要存储元素的数目则选择vectorc、若需要随机插入/删除(不仅仅在两端)则选择listd、只有需要在首端进行插入/删除操作的时候还要兼顾随机访问效率才选择deque否则都选择vector。e、若既需要随机插入/删除又需要随机访问则需要在vector与list间做个折中-deque。f、当要存储的是大型负责类对象时list要优于vector当然这时候也可以用vector来存储指向对象的指针同样会取得较高的效率但是指针的维护非常容易出错因此不推荐使用