现在的位置: 首页 > 综合 > 正文

第九章 顺序容器 (一)

2013年10月09日 ⁄ 综合 ⁄ 共 1876字 ⁄ 字号 评论关闭

顺序容器的类型:

顺序容器:

vector

list

deque

顺序容器适配器

stack

queue

priority_queue

9.1 顺序容器的定义

1)      头文件

#include<vector>

#include<list>

#include<deque>

 

2)      初始化

例如:

vector<int> a1; // 这个时候其实不进行int的初始化操作,

vector<int > a2(a1);

vector<int> a3(a1.begin(),a1.end());

vector<int> a4(n,10);//n10

vector<int> a5(n);//size()==n

 

3)      引用类型没有进入容器的权利~

4)      做容器的容器的时候注意书写

vector< vector<string> > b;//”>>”空格是不能少的!

9.2 迭代器的范围

1) 对于vector
deque来说,迭代器可以进行加减运算,大小比较,因为他们是线性的…..

2)  对于end()
总是指向了一个空迭代器

3)  删除元素可以用eraser()

9.3 顺序容器的操作

1) 容器定义的类型别名

size_type          储存容器类型的长度

iterator             迭代器

const_iterator          只读的迭代器

reverse_iterator      逆序迭代器

const_reverse_iterator   逆序只读迭代器

difference_type        足够存储两个迭代器差值的有符号整形

value_type       元素类型

reference                  
元素的左值等效于value_type&

const_reference      元素的常量左值等效于 const value_type&

 

2) begin,end//顺序的              
rbegin,rend//

4个函数都有两种,一种返回的是非const迭代器,一种返回const迭代器,根据容器的类型决定

 

3)  添加元素

c.push_back(t);

c.push_front(t);//只适用于list
deque

c.insert(p,t);//p指向的元素前面插入

c.insert(p,n,t);//p指向的元素前面插入nt

c.insert(p,b,e);//p指向的元素前面插入b->e的元素

 

这些函数只是保存了副本,对原来的变量没有影响

 

例子:

list<string> lst

list<sring> :: iterator iter =lst.begin();

while(cin>>word)

         iter= lst.insert(iter,word);//等效于push_front();

 

任何添加操作都可能使得迭代器失效,不要存储end()返回的迭代器~

 

4)      关系操作符

容器的比较,用到的是容器存储的元素的比较.

 

5)      容器大小的操作

 

c.size();

c.max_size();//返回最多可以容纳的个数

c.empty();//判断是否为空

c.resize(n);//将大小限制为n
多了就减少 少了就增加

c.resize(n,t);// 增加的元素都为t

 

resize操作同样可以使迭代器无效~

 

6)      访问元素

front 或者 back
返回的是引用

 

c.back();

c.front();

c[n]//只适用于vector
deque

c.at(n);//只使用与vector
deque 如果越界将抛出out_of_range异常

 

7)      删除元素

c.erase(p);//返回删除元素的下一个元素

c.erase(b,e);//同上

c.clear();//删除所有

c.pop_back();//删除容器最后一个元素

c.pop_front();//删除容器第一个元素,只适用于list
或者 deque 容器

 

例子:删除指定值的一个元素

string searchValue(“Quasimodo”);

list<string> :: iterator iter=find(slist.begin(),slist.end(),searchValue);

if(iter!=slist.end())

         slist.erase(iter);

 

8)      赋值与swap

 

c1=c2;

c1.swap(c2);//没有删除插入的操作,在常量时间内进行

c.assign(b,e);//

c.assign(n,t);

抱歉!评论已关闭.