c++之迭代器

Posted sxgloverr1314

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++之迭代器相关的知识,希望对你有一定的参考价值。

一、迭代器简介

    迭代器是一种遍历容器内元素的数据类型,类似于指针。迭代器是用来指向容器内的某一个元素。

    如:string、vector都可以用[]进行访问,但更常用的访问方式是使用迭代器进行访问。

    通过迭代器可以读取、修改指向的容器内的元素。

    常用的容器还有list、map,c++都有对应的迭代器。

二、容器的迭代器类型

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 迭代器

      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出循环

  

 

以上是关于c++之迭代器的主要内容,如果未能解决你的问题,请参考以下文章

C++之迭代器失效总结

STL之--插入迭代器(back_inserter,inserter,front_inserter的区别)

为啥在达到容量后在向量中进行插入时,C++ 不处理迭代器?

C++迭代器 iterator

C++迭代器 iterator

深入理解C++迭代器:让你的C++代码更加灵活