每种顺序容器都提供了一组有用的类型定义以及以下操作:在容器中添加元素 在容器中删除元素 设置容器大小 (如果有的话)获取容器内的第一个和最后一个元素
容器定义的类型别名 | |
size_type | 无符号整型,足以存储此容器类型的最大可能容器长度 |
iterator | 此容器类型的迭代器类型 (该迭代器类型元素的成员) |
const_iterator | 元素的只读迭代器类型 |
reverse_iterator | 按逆序寻址元素的迭代器(反过来 例如做++运算时 是前一位了 而不是后一位了) |
const_reverse_iterator | 元素的只读(不能写)逆序迭代器 |
different_type | 足够存储两个迭代器差值的有符号整型,可为负数 |
value_type | 元素类型 |
reference | 元素的左值类型,是value_type&的同义词 |
const_reference | 元素的左值类型,等效于const value_type& |
容器的begin和end操作
C.begin(); 返回一个迭代器,它指向容器c的第一个元素
C.end(); 返回一个迭代器,它指向容器c的最后一个元素的下一个位置
C.rbegin(); 返回一个逆序迭代器,它指向c的最后一个元素
C.rend(); 返回一个逆序迭代器,它指向容器c的第一个元素前面的位置
下面谈谈在顺序容器中添加元素的操作
C.push_back(t) 在容器C的尾部添加值为t的元素,返回的类型为void;
C.push_front(t) 在容器C的前端添加值为t的元素,返回类型也是void;
以下三种操作只适用于 list和deque容器类型:
C.insert(p,t) 在迭代器p所指向的元素前面插入值为t的新元素,返回指向添加新元素的迭代器。
C.insert(p,n,t) 在迭代器p所指向的元素前面插入n个值为t的新元素,返回类型为void。
C.insert(p,b,e) 在迭代器p所指向的元素的前面插图有迭代器b和e 标记的范围内的元素。返回类型为void。
为什么是在迭代器p所指向元素的前面插入呢?是因为迭代器可以指向容器的末端的下一个位置。
容器都支持关系操作符来实现两个容器的比较 有以下特点:
A.如果两个容器具有相同的长度而且所有元素都相等,那么这两个容器就相等;否则,他们就不相等
B.如果两个容器的长度不相同,但较短的容器中所有元素都等于较长容器中对应的元素,则称较短的容器小于另一个容器。
C.如果两个容器都不是对方的初始子序列,则他们的比较结果取决于所比较的第一个不相等的元素。
要操作容器 必须先了解容器 例如 这个容器有多少个元素?它又能容纳多少个元素?当我需要存放100个元素 但容器只能容纳80个元素怎么办?
首先呢 拿到一个容器,用size()方法能得知该容器当前有多少个元素。用max_size()方法能得知改容器最多能装多少个元素。调用empty()方法能得知当前容器是否为空(没有元素)。用resize(n)方法能使容器容纳n个元素 如果n小于容器原来的长度 则多余的元素将被删除掉。另外resize方法还可以这样用resize(n,t) 表示呢 使容器的能容纳n个元素 新添加的元素(n - 容器.size())的值都为t。
要获取容器第一个元素的引用呢(是引用)用front()方法 如果容器为空 则视为该操作未定义
Back()函数是用来获取容器最后一个元素的引用 如front相反
容器名称[n] 这种是直接通过指定下标来获取指定元素的引用 如果n不在容器范围内 则视为该操作未定义。
at[n] 同上 也是通过下表来获取指定元素的引用 不同的是在给出的下标无效时 其会抛出 out_of_range异常 但是这种写法只适用于 vector和deque
容器就像公司一样 有人入职 当然也就有人离职 公司发展快了 当然要扩张 。发展不顺利呢 也是要裁员的。公司的职员呢都有编号。可以通过编号找到该职员..........
前面将了入职 扩张 根据编号找员工 下面就谈谈裁员吧
erase(p)这个是将指定一个对象裁掉 erase(b,e)是裁掉指定的一部分对象
Clear() 是裁掉所有对象 (貌似是倒闭是发生的)
pop_back() 是裁掉最后一个对象(最后一个入职的)
pop_front() 是裁掉第一个对象(第一个入职的)(vector容器不支持)
list<int> ilist(10,42);
ilist.clear()或者ilist.erase(ilist.begin(),ilist.en());
list<string>::iterator elem1,elem2;
elem1=find(ilist.begin(),ilist.end(),val1);
Elem2=find(elem1,ilist.end(),val2);
Ilist.erase(elem1,elem2);
val1 val2 均为ilist中的元素