c++顺序容器vector,List,d…
2013-11-22 11:01
246 查看
原文地址:c++顺序容器vector,List,deque的区别作者:月影人三种容器均支持resieze()操作,重新划定容器大小,且此函数有重载。
vector
vector和built-in数组类似,是一个在堆上建立的一维数组,它拥有一段连续的内存空间,并且起始地址不变,因此
它能非常好的支持随即存取,即[]操作符。vector因为存储在堆上,所以支持erase( ),
resieze()(重新划分容器容量)等操作;
vector不用担心越界当空间不够用的时候,系统会自动按照一定的比例(对capacity(
)大小)进行扩充。在vector序列末尾添加(push_back( ))或者删除(pop_back(
))对象效率高,在中间进行插入或删除效率很低,主要是要进行元素的移动和内存的拷贝,原因就在于当内存不够用的时候要执行重新分配内存,拷贝对象到新存储区,销毁old对象,释放内存等操
作,如果对象很多的话,这种操作代价是相当高的。为了减少这种代价,使用vector最理想的情况就是事先知道所要装入的对象数目,用成员函式
reserve( )预定下来;vector最大的优点莫过于是检索(用operator[ ])速度在这三个容器中是最快的,
list
list的本质是一个双向链表(根据sgi
stl源代码),内存空间不连续,通过指针进行操作。说道链表,它的高效率首先表现是插入,删除元素,进行排序等等需要移动大量元素的操作。显然链表没有检索操作operator[
],
也就是说不能对链表进行随机访问,而只能从头至尾地遍历,这是它的一个缺陷。list有不同于前两者的某些成员方法,如合并list的方法splice(
), 排序sort( ),交换list 的方法swap( )等等。
deque
deque是一个double-ended
queue是由多个连续内存块构成,deque是list和vector的兼容,分为多个块,每一个块大小是512字节,块通过map块管理,map块里保存每个块得首地址。因此该容器也有索引操作operator[
],效率没vector高。另外,deque比vector多了push_front( ) &
pop_front( )操作。在两端进行此操作时与list的效率 差不多
下面是选择顺序容器类型的一些准则
1.如果我们需要随机访问一个容器则vector要比list好得多 。
2.如果我们已知要存储元素的个数则vector 又是一个比list好的选择。
3.如果我们需要的不只是在容器两端插入和删除元素则list显然要比vector好
4.除非我们需要在容器首部插入和删除元素否则vector要比deque好。
5.如果只在容易的首部和尾部插入数据元素,则选择deque.
6.如果只需要在读取输入时在容器的中间位置插入元素,然后需要随机访问元素,则可考虑输入时将元素读入到一个List容器,接着对此容器重新拍学,使其适合顺序访问,然后将排序后的list容器复制到一个vector容器中
vector
vector和built-in数组类似,是一个在堆上建立的一维数组,它拥有一段连续的内存空间,并且起始地址不变,因此
它能非常好的支持随即存取,即[]操作符。vector因为存储在堆上,所以支持erase( ),
resieze()(重新划分容器容量)等操作;
vector不用担心越界当空间不够用的时候,系统会自动按照一定的比例(对capacity(
)大小)进行扩充。在vector序列末尾添加(push_back( ))或者删除(pop_back(
))对象效率高,在中间进行插入或删除效率很低,主要是要进行元素的移动和内存的拷贝,原因就在于当内存不够用的时候要执行重新分配内存,拷贝对象到新存储区,销毁old对象,释放内存等操
作,如果对象很多的话,这种操作代价是相当高的。为了减少这种代价,使用vector最理想的情况就是事先知道所要装入的对象数目,用成员函式
reserve( )预定下来;vector最大的优点莫过于是检索(用operator[ ])速度在这三个容器中是最快的,
list
list的本质是一个双向链表(根据sgi
stl源代码),内存空间不连续,通过指针进行操作。说道链表,它的高效率首先表现是插入,删除元素,进行排序等等需要移动大量元素的操作。显然链表没有检索操作operator[
],
也就是说不能对链表进行随机访问,而只能从头至尾地遍历,这是它的一个缺陷。list有不同于前两者的某些成员方法,如合并list的方法splice(
), 排序sort( ),交换list 的方法swap( )等等。
deque
deque是一个double-ended
queue是由多个连续内存块构成,deque是list和vector的兼容,分为多个块,每一个块大小是512字节,块通过map块管理,map块里保存每个块得首地址。因此该容器也有索引操作operator[
],效率没vector高。另外,deque比vector多了push_front( ) &
pop_front( )操作。在两端进行此操作时与list的效率 差不多
下面是选择顺序容器类型的一些准则
1.如果我们需要随机访问一个容器则vector要比list好得多 。
2.如果我们已知要存储元素的个数则vector 又是一个比list好的选择。
3.如果我们需要的不只是在容器两端插入和删除元素则list显然要比vector好
4.除非我们需要在容器首部插入和删除元素否则vector要比deque好。
5.如果只在容易的首部和尾部插入数据元素,则选择deque.
6.如果只需要在读取输入时在容器的中间位置插入元素,然后需要随机访问元素,则可考虑输入时将元素读入到一个List容器,接着对此容器重新拍学,使其适合顺序访问,然后将排序后的list容器复制到一个vector容器中
相关文章推荐
- C++顺序容器vector、deque、list
- C++顺序容器vector、deque、list
- C++顺序容器vector、deque、list
- C++语法基础--顺序容器(一)--vector,list,deque
- Effective C++ (8) 顺序容器vector,list,deque
- C++顺序容器vector、deque、list
- C++容器-2顺序容器vector、list、deque的使用
- C++的STL容器之顺序性容器vector、list、deque
- C++顺序容器vector,deque,list
- C++ 9.1 顺序容器-----vector、list、deque
- C++基础与技巧【顺序容器】 (三大顺序容器~vector, list, deque)
- C++ STL基本容器string,vector,list,deque,map..[转]
- C++顺序容器之list初探
- Phone List(C++ vector容器)
- 容器:C++vector用法 VS C#list用法
- C++ 容器 LIST VECTOR erase
- c++ 标准库的各种容器(vector,deque,map,set,unordered_map,unordered_set,list)的性能考虑
- 【C++】顺序容器之vector用法
- 顺序容器vector、list、deque的区别
- c++ 标准库的各种容器(vector,deque,map,set,unordered_map,unordered_set,list)的性能考虑