Vector:
内存的分配:为了支持快速随机访问
vector 容器的元素以连续的方式存放,每一个元素紧挨着前一个元素存储。为了使 vector 容器能够实现快速的内存分配,其实际分配的容量要比当前所需的空间要多一些, vector 容器预留了额外的存储区,用于存放新添加的元素。所以
capacity 所返回的值大于 size.而且
clear()/erase() 可以减小 vector 的 size, 但并不能减少 capacityvector
对象的重要属性就在于可以在运行时高效的添加元素vector
常用的操作:empty
():判断是否为空格size
():返回 v 中元素的个数push_back(t):
在末尾增加一个值为 t 的元素[n]:
返回 v 中位置为 n 的元素 , 注意下标操作不能添加元素= ==
! = <= >= < >begin,end
函数用于返回迭代器: begin 返回第一个元素, end 返回最后一个元素的下一个元素c.insert(p,t),p
所指位置插入 t 元素 , 返回新加元素的迭代器c.insert(p,n,t)p
所指位置插入 n 个值为 t 的元素,返回 void 类型c.insert(p,b,e),p
所指位置插入 b 到 e 范围内的元素,返回 void 类型
list /deque
push_back(t):
在末尾增加一个值为 t 的元素push_front(t):
在前端增加一个值为 t 的元素c.insert(p,t),p
所指位置插入 t 元素 , 返回新加元素的迭代器c.insert(p,n,t)p
所指位置插入 n 个值为 t 的元素,返回 void 类型c.insert(p,b,e),p
所指位置插入 b 到 e 范围内的元素,返回 void 类型
共同的操作:
c.back
():返回最后一个元素的引用c.front
():返回第一个元素的引用c[n]:
返回下标为 n 的元素的引用 for vector and dequeuec.at(n):
返回下标为 n 的元素的引用 for vector and dequeuec.erase(p)
删除迭代器所指元素c.clear()
删除所有的元素c.pop_back()
删除容器最后一个元素c.pop_front()
删除容器第一个元素c.assign()
重新赋值c.swap()
交换内容Iterator
Vector,deque支持迭代器算术运算,比较运算
List不支持算术运算,比较运算,只支持常用的++/--/==
标准库为每一种标准容器定义了一种迭代器类型,例如
vector*
:解引用操作符来访问迭代器所指向的元素++
、 -- :自增自减操作符==
! =【】可以通过下标操作符,改变元素的值,但不能添加元素
算术运算
const_iterator:只读迭代器只用于读取容器内元素的值,但不能改变其值
reverse_iterator:按逆序寻址元素的迭代器,反转了某些相关的迭代器操作,例如++将指向容器中的前一个元素。
c.begin:
返回一个迭代器,指向容器第一个元素c.end:
返回一个迭代器,指向容器最后一个元素c.rbegin:
返回一个迭代器,指向容器最后一个元素c.rend: 返回一个迭代器,指向容器第一个元素
练习如下:
# include
using namespace std;
# include
# include
# include
# include
int main()
{
vector
for(vector
{
*ix = 3;
cout<<"The value "<< "is "<< *ix<
vector
// vector
cout <<"The value of mid1 is"<
for(vector
{
cout<<"The value "<< "is "<< *it<
//reverse_iterator
for(vector
{
*itq = 6;
cout<<"The value "<< "is "<< *itq<
ivec.push_back(5);
vector
ivec.insert(iit,8);
cout<<"Check whether insert work"<
{
cout<<"The value "<< "is "<< *itz <
cout<<"The back value is "<
ivec.erase(itr);
for(vector
{
cout<<"The value "<< "is "<< *its <
ivec.clear();
cout<<"Clear is called"<
ivec.assign(20,33);
vector
ivec2.assign(20,55);
ivec.swap(ivec2);
vector
for (vector
ivec3.push_back(i);
for(vector
{
cout<<"The value "<< "is "<< *itss <
cout<<"The size of ivec is"<
cout<<"The size of ivec is"<
}
运行结果如下:
The value is 3
The value is 3
The value is 3
The value is 3
The value is 3
The value is 3
The value is 3
The value is 3
The value is 3
The value is 3
The value of mid1 is00491DE4
The value is 3
The value is 3
The value is 3
The value is 3
The value is 3
The value is 3
The value is 3
The value is 3
The value is 3
The value is 3
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
Check whether insert work
The value is 8
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
The value is 5
The back value is 5
The front value is 8
The value is 8
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
The value is 6
The value is 5
Clear is called
The value is 55
The value is 55
The value is 55
The value is 55
The value is 55
The value is 55
The value is 55
The value is 55
The value is 55
The value is 55
The value is 55
The value is 55
The value is 55
The value is 55
The value is 55
The value is 55
The value is 55
The value is 55
The value is 55
The value is 55
The size of ivec is10
The capacity of ivec is16
The size of ivec is9
The capacity of ivec is16