STL概览-序列容器vector,deque,list(三)

 

===================================================

容器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>针对classbool的情况作了特殊的设计。动机很简单——bool没有必要用8bit一个btye来存储。也就是说vector<bool>具有按位处理的能力,这在C++中是罕见的。所以多出了这么两个函数:.flip() [].flip() 前者对整个容器按位取反,后者指对一个元素[]这么做

 

 

 

==============================================================

Deque

|

|->名称----->deque

|->说明----->除了能那个两头同时添加元素外,dequevector并没有太大差别。

|->陷阱

|      |------>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()   

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值