第二部分——第九章/顺序容器

来源:互联网 发布:帝国cms官网 编辑:程序博客网 时间:2024/05/16 23:37

1:三种顺序容器 vector    list    deque(双端队列)

      及对应适配器 stack     queue    priority_queue

     初始化除了有默认构造函数外,还有其他容器构造函数,如:C<T> c(c2)复制构造函数   C<T> c(b,e)创建c,其元素是迭代器b和e标本的范围内元素的副本,

C<T> c(n, t)用n个值为t的元素创建容器c    C<T> c(n)创建有n个值初始化

 

2:大多数类型都可作为容器的元素类型,但有两个限制

1) 必须支持赋值运算

2) 该类型对象必须可以复制

例子:引用不支持一般意义的赋值运算;IO库类型不支持赋值和复制,因此也不能创建存放IO类型对象的容器

而容器元素可以是容器类型,但需注意,必须使用空格 vector< vector<string> > lines;  否则>>被当成是移位符

 

3:通过迭代器访问容器中的元素

      只有vector和deque容器提供两种重要的运算集合:迭代器算术运算和除了==以及!=之外的关系操作符对两个迭代器进行比较

      迭代器范围,是一个左闭合区间 [beg, end),当beg和end相等时,迭代器范围为空;当不相等时,则迭代器范围内至少有一个元素,beg指向该区间中的第一个元素,并通过若干次自增运算可以使beg值不断增大,直到beg==end为止

      使迭代器失效的容器操作:erase()函数,删除容器中的某个元素,任何指向已删除元素的迭代器都具有无效值

 

4:容器定义的类型别名

1) size_type    无符号整型,足以存储此容器类型的最大可能容器长度

2) iterator        此容器的迭代器类型

3) const_iterator

4) reverse_iterator  按逆序寻址元素的迭代器

5) difference_type   有符号整型

6) value_type           元素类型

 

5:begin和end成员

1) c.begin()     返回一个迭代器,指向容器c的第一个元素

2) c.end()        指向c最后一个元素的下一位置

3) c.rbegin()   指向第一个元素的前一个位置

4) c.rend()      指向最后一个元素

 

6:添加元素的操作

1) c.push_back(t)

2) c.push_front(t)

3) c.insert(p, t)              在迭代器p所指向的元素前面插入值为t的新元素,返回新添加元素的迭代器

4) c.insert(p, n, t)          -------------------------------------------n个值为t的新元素,返回void类型

5) c.insert(p, b, e)

 

7:两个容器的比较,容器必须具有相同的容器类型

1) 具有相同的长度并且对应位置的元素相等,则两容器相等

2) 长度不相同,且较短者所有元素都等于较长者对应元素的值,则较短者小于较长者

3) 两容器都不是对方的初始子序列,则它们的比较结果取决于所比较的第一个不相等的元素

 

8:容器大小操作

1) c.size()               返回元素个数,类型为size_type

2) c.max_size()    返回可容纳的最多元素个数

3) c.empty()

4) c.resize(n)

5) c.resize(n, t)

 

9:访问元素

1) c[n]          只适用于vector和deque容器

2) c.at(n)     只适用于vector和deque容器

3) *iter         通用

 

10:删除元素

1) c.erase(p) 

2) c.erase(b, e)

3) c.clear()

4) c.pop_back()

5) c.pop_front()         只适用于list或deque

 

11:赋值与swap

1) c1.swap(c2)      两容器交换内容

2) c.assign(b, e)     b和e必须不是c的迭代器

3) c.assign(n, t)

 

12:vector容器的元素是以连续的方式存放,所以添加一个元素,当容器中已经没有空间容纳新的元素,则必须重新分配存储空间,存放在旧存储空间的必须复制到新存储空间中,若每次都要这么分配,则性能非常慢;list是链表存储,则不存在这样的问题

        然而,大部分应用中,vector容器都是最好的,vector容器预留了额外的存储区,访问元素的便利弥补了存储代价;capacity()  返回容器在必须分配新存储空间之前可以存储的元素总数

 

13:只适用于string类型的操作

1) substr(pos, n)  函数      检索需要的子串

2) append()                         在字符串末尾添加字符

3) replace()                         替换字符串中的内容

 

14:string类型的查找操作

1) find(args)                        查找args的第一次出现

2) rfind(args)                      ---------------最后一次出现

3) find_first_of(args)         查找args的任意字符的第一次出现

4) find_last_of(args)

5) find_first_not_of(args)

6) find_last_not_of(args)

 

15:string类型的比较   compare()函数,不同的重载函数;也可以和C风格字符串进行比较

 

16:容器适配器、迭代器适配器、函数适配器

      适配器:使一事物的行为类似于另一事物的行为的一种机制

      stack栈可以建立在vector/list/deque容器上;queue适配器要求其关联的基础容器必须提供push_front运算,因此只能建立在list容器上;priority_queue适配器要求提供随机访问功能,因此可建立在vector和deque容器上,不能建立在list上

原创粉丝点击