【语法回顾】C++STL:容器(一)


2012-07-12 12:05
by
ATP_,
968
阅读,
0
评论,
收藏,
编辑

.顺序容器的定义

顺序容器,它将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素,这就是顺序容器。顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定的。

标准库定义来三种顺序容器:vectorlistdeque(双端队列读音”deck”

三种顺序容器的适配器:stackqueuepriority_queue

相关头文件

#include<vector> #include<list>

#include<deque> #include<stack> #include<queue>

容器的初始化(4种)

vector<int> ivec; //默认构造函数

vector<int> c(c2); //创建容器 c2的副本

vector<int> c(n, t); //n个值为t 的元素创建并初始化容器

list<string> mylist(3, “haha”); // 3个”haha”字符串初始化list

list<string> mylist1(mylist.begin(), mylist.end()); // 初始化为其他容器的一部分

容器操作的特殊要求

容器的存储类类型的对象,只有当其元素类型提供默认构造函数时,才可以使用容器

Car类没有默认构造函数,但是含有一个int形参的构造函数

?
1
2
3
4
5
vector<Car> cars; // 正确,没有调用默认构造函数
vector<Car> cars(10); //错误,该声明的含义是定义并初始化10个Car类的对象,调用了默认构造函数,但是Car没有提供
vector<Car> cars(10, 1); //正确,调用来int形参的构造函数

二.容器的容器

vector< vector<string> > lines; //必须用空格间隔开两个>符号

A.迭代器常用运算

*iter //返回迭代器iter所指向元素的引用

iter->number // 当容器中的元素为结构体或类时,相当于对其解引用,并返回number成员值

iter++; iter--; //迭代器的自增自减

iter1 == iter2 //iter1iter2指向同一容器的同一元素时相等,或者同时指向.end();

只有vectordeque中,迭代器支持的算数运算: iter+n -n, iter1 + iter2 – iter3; 关系运算:>,<,>=,<=

注意:在使用迭代器时,必须留意哪些操作会使迭代器失效,比如增删等操作。例:当vector在执行来push_back的操作后,就不能再信任之前的iterator值了

B.容器定义的类型别名(常用)

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

iterator // 此容器的迭代器类型

reverse_iterator // 此容器按逆序寻址的迭代器

const_iterator // 只读迭代器

const_reverse_iterator // 只读逆序迭代器

三.容器的常用操作

A.在顺序容器中添加人元素的操作(原迭代器可能失效)

c.push_back(t) // 在容器c的尾部添加

c.push_front(t) // 在容器c 的前端添加

c.insert(iter, t) //在迭代器iter所指位置前添加元素t

c.insert(iter, iterA, iterB) // 在迭代器iter所指位置前添加有迭代器iterA,iterB所限制范围内的元素

注意:容器元素的插入,复制结果都是原数据的副本,互不影响。

B.容器大小的操作

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

c.empty()

c.resize(n) // 调整容器的长度大小,使其能够枸容纳n个元素

c.resize(n,t) // 新增的范围都以元素t来填充

C.元素的访问

c.back() //返回容器c的最后一个元素的引用

c.front() //返回容器的第一个元素的引用

c[n] //下标操作,只有vector,deque (string) 可以使用

D.删除元素

c.erase(p) // 删除迭代器p所指向的元素

c.erase(b, e) //删除迭代器b,e之间的元素

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

c.pop_front() //删除容器第一个元素

c.clear() // 清空容器

c1.swap(c2) // c1,c2存放内容交换

c.assign(b, e) //重新设置c的元素,将迭代器b,e之间的元素复制到c中去,b,e必须不是指向c中元素的迭代器

发表回复