一、 list
链表,双向链表,只能顺序访问,不能使用[ ](即下标)进行随机访问。
可以不分配必须的内存大小方便的进行添加和删除操作。使用的是非连续的内存空间进行存储。
优点:(1) 不使用连续内存完成动态操作。
(2) 在内部方便的进行插入和删除操作
(3) 可在两端进行push、pop
缺点:(1) 不能进行内部的随机访问,即不支持[ ]操作符和vector.at()
(2) 相对于verctor占用内存多
list容器是双向链表,因此可以有效的在任何位置添加和删除。列表的缺点是不能随机访问内容,要想访问内容必须在列表的内部从头开始便利内容,或者从尾部开始。
void printList(list n){
for(list::iterator i=n.begin();i!=n.end();i++)
cout<< *i << " ";
cout< list1,list2;
list1.push_back(123);
list1.push_back(0);
list1.push_back(34);
list2.push_back(100);
list2.push_back(12);
//测试list排序功能
printList(list1); //输出 123 0 34
list1.sort();
printList(list1); //输出 0 34 123
list2.sort();
list1.merge(list2); //两个链表排序后进行合并,合并完仍然有序
printList(list1); //输出 0 12 34 100 123
return 0;
}
二、vector
向量 相当于一个数组 支持[ ]进行随机访问。
在内存中分配一块连续的内存空间进行存储。支持不指定vector大小的存储。STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacituy()函数返回的大小,当超过此分配的空间时再整体重新放分配一块内存存储,这给人以vector可以不指定vector即一个连续内存的大小的感觉。通常此默认的内存分配能完成大部分情况下的存储。
优点:(1) 不指定一块内存大小的数组的连续存储,即可以像数组一样操作,但可以对此数组
进行动态操作。通常体现在push_back() pop_back()
(2) 随机访问方便,即支持[ ]操作符和vector.at()
(3) 节省空间。
缺点:(1) 在内部进行插入删除操作效率低。
(2) 只能在vector的最后进行push和pop,不能在vector的头进行push和pop。
(3) 当动态添加的数据超过vector默认分配的大小时要进行整体的重新分配、拷贝与释放
std::vector矢量容器:可以随机访问容器的内容,在序列末尾添加或删除对象,但是因为是从尾部删除,过程非常慢,因为必须移动插入或删除点后面的所有对象。
#include
#include
#include
#include