STL概览-序列容器vector,deque,list
2008-12-12 10:31
661 查看
容器container
|->用来管理一组对象的集合,这里的对象叫做元素。
|->分类
| |->序列式容器
| | |->每个被插入的元素,都有一个固定的位置,这个位置取决于操作者(程序或者程序 | | 员或者用户)在什么时机将元素插入。但是一旦插入以后,位置不在发生改变,除非| | 你采取remove或者erase等措施。
| |->关联时容器
| |->被插入的元素并没有一个固定的位置。这不仅是指操作者可能更改其中元素的位置,| 还 有可能——每当新插入一个元素时,容器都会自动的按照某种排序规则将新来元| 素放置在合适的位置。也即,这种容器内元素的排列顺序由容器自己的排序规则决 | 定,操作者无能为力。
|->核心
| |--->所有容器都采用value语义,而不是reference语义。这就是说对于容器的元素必须满足 | | copyconstructor 和assignment,否则容器无法完成正常的工作,比如排序,交换,等。
| |--->每个容器都提供若干个用于接洽元素的接口——iterator。外界(包括STL的各种算法正式 | | 通过这种接口发生作用的。
| |--->几乎容器的所有操作都不保证安全性(个别除外,如.at()),STL在效率和安全平衡上的选择 | 是绝对倾向于前者的。
|->通用操作
|--->constructor
| |->default,copy,assignment
|--->general property
| |->.size() .max_size() .empty()
|--->comparison
| |->== ,!= ,>,<,>=,<=
|--->assignmnt
| |->=,.insert() .erase() .clear()
|--->iterator
|->.begin() .end() .rbegin() .rend()
==============================================================
序列式容器sequence container:每个被插入的元素,都有一个固定的位置,这个位置取决于操作者(程序或者程序员或者用户)在什么时机将元素插入。但是一旦插入以后,位置不在发生改变,除非你采取remove或者erase等措施。
==============================================================
vector
|
|->名称----->vector
|->应用----->大凡能用到动态数组的地方都用得到
|
|->个性
| |------> 随机存取,他多对应的迭代器iterator也具有随机的属性,即满足指针运算。
| |------> 当采用push_back添加元素时具有很高的效率,但如果是insert方式,情况就相当糟糕
|
|->陷阱
| |------> 我们可以采用reserve()来给已经做好的vector扩容,但你不能用他缩容。
| 一个邪门的方法是:vecotr<class> v.swap(v),这居然能办到?!(可我这不行)。
|
|->Type----->calss
|->Include---><vector>
|->Define---->vector<class>
|->Sub
| |------>constructor见容器的通用操作
| |------>其中的assignment有三种参数的情况:(n),(beg,end),(n,elem)
|
|->Fun
|------>NoModify operate
| |->.size() .max_size() .capacity() .empty() .reserve() 和comparisions
|------>assignment operate
| |->=,.assign() .swap()
|------>access operate
| |->[], .at() .front() .back()
|------>iterator
| |->.begin() .end() .rbegin() .rend()
|------>modify operate
|->.insert() .push_back() .pop_back() .resize() .clear()
[注]. Vector<class>针对class为bool的情况作了特殊的设计。动机很简单——bool没有必要用8个bit一个btye来存储。也就是说vector<bool>具有按位处理的能力,这在C++中是罕见的。所以多出了这么两个函数:.flip() [].flip() 前者对整个容器按位取反,后者指对一个元素[]这么做 。
==============================================================
Deque
|
|->名称----->deque
|->说明----->除了能那个两头同时添加元素外,deque跟vector并没有太大差别。
|->陷阱
| |------>deque不再支持内存的动态分配。
|
|->Type----->class
|->Include---><deque>
|->Define---->deque<calss>
|->Fun
|------>在vector中去掉了:.capacity() .reserve()
|------>在vector中多了:.push_front() .pop_front()
==============================================================
list
|
|->名称----->list
|->应用----->容器中的元素需要做大量的换位操作时。
|
|->个性
| |------>不能够随机存取,这导致它的iterator同样在运算上要被限制。
| |------>对元素作变化位置的操作是有很高的效率的,但如果要查找某个元素则很浪费时间。
| |------>根deque一样,它是双向的。
|
|->陷阱
| |------>不能针对iterator做+5之类的运算,但* & 仍然成立。
| |------>STL某些算法可能具有很低的效能(比如remove),这是因为list已经不再适合查找元素了
|
|->Type----->class
|->Include---><list>
|->Define---->list<class>
|->Fun
|------>在deque基础上少了:.at()
|------>在deque基础上多了:.remove() .remove_if() .unique() .splice() .sort()
.merge() .reverse()
|->用来管理一组对象的集合,这里的对象叫做元素。
|->分类
| |->序列式容器
| | |->每个被插入的元素,都有一个固定的位置,这个位置取决于操作者(程序或者程序 | | 员或者用户)在什么时机将元素插入。但是一旦插入以后,位置不在发生改变,除非| | 你采取remove或者erase等措施。
| |->关联时容器
| |->被插入的元素并没有一个固定的位置。这不仅是指操作者可能更改其中元素的位置,| 还 有可能——每当新插入一个元素时,容器都会自动的按照某种排序规则将新来元| 素放置在合适的位置。也即,这种容器内元素的排列顺序由容器自己的排序规则决 | 定,操作者无能为力。
|->核心
| |--->所有容器都采用value语义,而不是reference语义。这就是说对于容器的元素必须满足 | | copyconstructor 和assignment,否则容器无法完成正常的工作,比如排序,交换,等。
| |--->每个容器都提供若干个用于接洽元素的接口——iterator。外界(包括STL的各种算法正式 | | 通过这种接口发生作用的。
| |--->几乎容器的所有操作都不保证安全性(个别除外,如.at()),STL在效率和安全平衡上的选择 | 是绝对倾向于前者的。
|->通用操作
|--->constructor
| |->default,copy,assignment
|--->general property
| |->.size() .max_size() .empty()
|--->comparison
| |->== ,!= ,>,<,>=,<=
|--->assignmnt
| |->=,.insert() .erase() .clear()
|--->iterator
|->.begin() .end() .rbegin() .rend()
==============================================================
序列式容器sequence container:每个被插入的元素,都有一个固定的位置,这个位置取决于操作者(程序或者程序员或者用户)在什么时机将元素插入。但是一旦插入以后,位置不在发生改变,除非你采取remove或者erase等措施。
==============================================================
vector
|
|->名称----->vector
|->应用----->大凡能用到动态数组的地方都用得到
|
|->个性
| |------> 随机存取,他多对应的迭代器iterator也具有随机的属性,即满足指针运算。
| |------> 当采用push_back添加元素时具有很高的效率,但如果是insert方式,情况就相当糟糕
|
|->陷阱
| |------> 我们可以采用reserve()来给已经做好的vector扩容,但你不能用他缩容。
| 一个邪门的方法是:vecotr<class> v.swap(v),这居然能办到?!(可我这不行)。
|
|->Type----->calss
|->Include---><vector>
|->Define---->vector<class>
|->Sub
| |------>constructor见容器的通用操作
| |------>其中的assignment有三种参数的情况:(n),(beg,end),(n,elem)
|
|->Fun
|------>NoModify operate
| |->.size() .max_size() .capacity() .empty() .reserve() 和comparisions
|------>assignment operate
| |->=,.assign() .swap()
|------>access operate
| |->[], .at() .front() .back()
|------>iterator
| |->.begin() .end() .rbegin() .rend()
|------>modify operate
|->.insert() .push_back() .pop_back() .resize() .clear()
[注]. Vector<class>针对class为bool的情况作了特殊的设计。动机很简单——bool没有必要用8个bit一个btye来存储。也就是说vector<bool>具有按位处理的能力,这在C++中是罕见的。所以多出了这么两个函数:.flip() [].flip() 前者对整个容器按位取反,后者指对一个元素[]这么做 。
==============================================================
Deque
|
|->名称----->deque
|->说明----->除了能那个两头同时添加元素外,deque跟vector并没有太大差别。
|->陷阱
| |------>deque不再支持内存的动态分配。
|
|->Type----->class
|->Include---><deque>
|->Define---->deque<calss>
|->Fun
|------>在vector中去掉了:.capacity() .reserve()
|------>在vector中多了:.push_front() .pop_front()
==============================================================
list
|
|->名称----->list
|->应用----->容器中的元素需要做大量的换位操作时。
|
|->个性
| |------>不能够随机存取,这导致它的iterator同样在运算上要被限制。
| |------>对元素作变化位置的操作是有很高的效率的,但如果要查找某个元素则很浪费时间。
| |------>根deque一样,它是双向的。
|
|->陷阱
| |------>不能针对iterator做+5之类的运算,但* & 仍然成立。
| |------>STL某些算法可能具有很低的效能(比如remove),这是因为list已经不再适合查找元素了
|
|->Type----->class
|->Include---><list>
|->Define---->list<class>
|->Fun
|------>在deque基础上少了:.at()
|------>在deque基础上多了:.remove() .remove_if() .unique() .splice() .sort()
.merge() .reverse()
相关文章推荐
- STL概览-序列容器vector,deque,list
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- C++ STL 提供了3个序列容器 :vector, deque, list
- STL序列容器vector、deque、list和array学习笔记
- C++中防止STL中迭代器失效——map/set等关联容器——vector/list/deque等序列容器—如何防止迭代器失效—即erase()的使用
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- STL有6种序列容器(vector, list, deque, queue, priority_deque, stack)
- C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
- STL序列容器 vector, list, deque的比较
- STL中的容器使用比较(string vector list deque set map)
- stl提供了三个最基本的容器:vector,list,deque
- stl 顺序容器vector(priority_queue),顺序容器List,顺序容器deque(queue, stack)详解
- stl容器区别: vector list deque set map-底层实现
- (STL容器) vector. list. set. deque. map.
- C++ STL基本容器string,vector,list,deque,map..[转]
- 序列容器---vector,deque,list的区别
- 《关于STL中的list,vector,deque队列容器(written by Flower)》
- STL提供了三个最基本的容器:vector,list,deque。
- stl提供了三个最基本的容器:vector,list,deque
- STL容器用法速查表:list,vector,stack,queue,deque,priority_queue,set,map