c++之迭代器

匿名 (未验证) 提交于 2019-12-03 00:03:02

一、迭代器简介

二、容器的迭代器类型

vector<int> iv = {100,200,300}; vector<int>::iterator iter; // 定义迭代器 

三、迭代器相关操作

//begin() end()操作一般返回迭代器类型,反向迭代器rbegin()/rend(); vector<int> iv={100,200,300}; vector<int>::iterator iter; // 定义迭代器 iter = iv.begin();   //如果容器有元素,返回的迭代器指向第一个元素 iter = iv.end();      //指向末端元素的后边,为无效数据//如果一个容器为空,则begin()和end()返回的迭代器相同,起到标记的作用。
vector<int> iv={100,200,300}; // 使用正向迭代器 for(vector<int>::iterator iter = iv.begin(); iter != iv.end(); iter++){  cout << *iter << endl; //100 200 300}
// 使用反向迭代器 for(vector<int>::reverse_iterator riter = iv.rbegin(); riter != iv.rend(); riter++){  cout << *riter << endl; //300 200 100}

四、迭代器运算符

vector<int> iv = {100,200,300};
vector<int>::iterator iter = iv.end();
cout << *iter << endl; //错误操作,不能输出
vector<int>::iterator iter1 = iv.begin();
iter1++; //++指向后一个元素
cout << *iter1 << endl; //200
 
iter1--; //--指向前一个元素
 
cout << *iter1 << endl; //100// == != 两个迭代器是否指向同一个元素//如何引用结构体的成员,与结构体指针类似 // (*ptriter).num  ptriter->num

  

五、const_iterator 迭代器

vector<int> iv={100,200,300}; for(vector<int>::const_iterator iter = iv.begin(); iter != iv.end(); iter++){  cout << *iter << endl; //100 200 300}
const vector<int> iv={100,200,300}; //必须使用常量迭代器 for(vector<int>::const_iterator iter = iv.begin(); iter != iv.end(); iter++){  cout << *iter << endl; //100 200 300}

  

  cbebgin()和cend()操作

vector<int> iv={100,200,300}; for(vector<int>::const_iterator iter = iv.cbegin(); iter != iv.cend(); iter++){   *iter = 4;//报错
  cout << *iter << endl; //100 200 300}

六、迭代器失效

vector<int> iv = {1,2,3,4,5}; for(auto vecitem : iv){  iv.push_back(888); //将导致迭代器失效  cout << *vecitem << endl;}//在操作迭代器的过程中,不要改变容器的容量。(不要执行增加或删除的操作)//往容器中增加或删除元素,可能导致指向容器元素的指针、引用、迭代器失效。//失效就表示不能再表示任何容器中的元素,一旦使用失效的迭代器,等同于使用了野指针。//如果需要执行删除/新增等,需要立即break出循环

  

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!