C++ 顺序容器的一些记录

C++ 顺序容器

容器:按照元素存储到容器中以及访问方式的差异,容器分为顺序容器与关联容器。顺序容器也称为序列式容器。

C++本身内置了一个序列式容器array(数组),STL另外提供了vector,list,forward_list,deque,stack,queue,priority-queue,string等等序列式容器。所有的容器都是基于模板实现的,因为容器必须保证能装得下各种各样的类型。其中,stack,queue都是基于deque来实现的,priority-queue基于heap来实现,从技术上来说它们属于容器适配器(adapter)。其中array与forward_list是C++11添加的新容器类型。

要访问顺序容器和关联容器中的元素,需要通过“迭代器(iterator)”进行。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类似。

本质上,适配器是使一事物的行为类似于另一类事物的行为的一种机制。容器适配器让一种已存在的容器类型采用另一种不同的抽象类型的工作方式实现。例如,stack适配器可使任何一种顺序容器以栈的方式工作。

list<int> ilist;
for(size_t ix=0;ix!=4;++ix){
    ilist.push_front(ix);
}

//cout<<ilist.size()<<endl;
//指向常量的迭代器, j本身可变, 但*j不能变
list<int>::const_iterator j =  ilist.cbegin();

for(j;j != ilist.cend(); ++j){
    cout<< *j <<endl;
}
cout<<endl;
//end指向尾元素之后的元素
auto last = ilist.end();
cout<<*(--last)<<endl;

而迭代器失效都与内存管理分配有关。
对于序列式容器,比如vector,删除当前的iterator会使后面所有元素的iterator都失效。这是因为顺序容器内存是连续分配(分配一个数组作为内存),删除一个元素导致后面所有的元素会向前移动一个位置。(删除了一个元素,该元素后面的所有元素都要挪位置,所以,iter++,已经指向的是未知内存)。

其余内容细看:
【1】迭代器失效的几种情况总结:https://blog.csdn.net/lujiandong1/article/details/49872763
【2】C++ 顺序容器基础知识总结
:http://www.cnblogs.com/QG-whz/p/5152963.html
【3】适配器模式:https://www.jianshu.com/p/1c6acf4235d3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值