nnpc.net
当前位置:首页 >> C++关联容器迭代器不相容问题 >>

C++关联容器迭代器不相容问题

iter++ 超过了范围. 迭代器及失效了. 继续执行 iter++ , 程序是不会报错的,但是引用会出错的. 一般来说 在执行 iter++ ,之前要判断, iter!= coll.end(); 如果条件成立,在就不能区下个元素了,当前iter的元素已经是最后一个了. coll 就是容器对象.

大多数的的迭代器在做删除、添加的时候,都会失效的.以vector为例,vector的实现机制是预分配一定大小的内存,一般都是正好与你存的数据一样大容量的内存.从c的角度上来看,vector是一个一直在malloc和free操作的数组.除了查找、比较或者修改指定值等一些不修改vector容量的操作,其他的操作都会造成迭代器失效.

没看到问的是什么只看到:vector::iterator first=v.begin();while(first!=v.end()){ first=v.insert(first,42); ++first;}STL这样有访问又插入的非常危险,很容易出错的,

1、迭代器即受过封装的指针.获得其类型/指针范围便可知道是否在同一/(种)容器中2、同种容器判断:typeid(itArg).name(),对比两个迭代器即可.3、同一容器判断:计算容器整体(container.size())地址范围.4、关于2,旧版编译器是typeof(itArg).5、疑问:判断是否在同一容器内有什么意义?只要是迭代器类型可行,在该种类容器中是通行无阻的啊!无论指向哪个,都只是改一下赋值而已.对比容器内的其中一个数据有什么意义?

迭代器理解没错,一般用嵌套类封装了的ptr 就是string数据类型的vector类的嵌套类iterator,vector <string>::iterator就是类型

凡是修改了容器元素的,都可能导致迭代器失效,例如insert,push_back,erase等.

序列容器(Random)(vector,string,deque)所的算法都可以用.列表(Binary)只能用一些非变更性算法,(所有排序相关算法都不要用在list上.partition除外),list有自己的排序相关函数(作为成员函数实现).关联容器(BI)本身就是有序的,排序相关算法也不要用在上面,差不多就这些了.istream_stream是input iterator,一般的非变动性算法基本都能用.ostream_iteraoter是output iterator.

顺序容器就是数组,线性链表之类的;逻辑上是线性的一个容器; 关联,顾名思义;该数据又一个键值;作为一个索引;通过该键值可以引用他的另外一个或者多个数据; 这些容器随带一些相关算法; 其实这些容器,我们自己也可以编码实现,只不过这是早就定义好的一些算法;可以直接就用; 泛型就是类型无关的;如果非要问泛型是怎么实现的,这就要问编译器了;

是一个迭代器,在map,vector中使用在标准库里面定义

cout貌似不支持string类型的输出,像下面这样修改将string转为char*类型后再输出 #include <vector>#include "iostream"using namespace std;int _tmain(int argc, _TCHAR* argv[]){ string pp="pangpang"; vector<string>wdf; wdf.push_back(pp); typedef vector<string> vs; vs::iterator it; it=wdf.begin(); cout<<(*it).c_str()<<endl; return 0;}

相关文档
网站首页 | 网站地图
All rights reserved Powered by www.nnpc.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com