迭代器

除了vector之外,还有好几种容器
但是只有string和vector常用下标访问
引入了用来代替下标访问 - 迭代器访问

string不属于容器,但是也可以使用迭代器

指针:取地址 ,指向地址
迭代器:返回成员 ,指向数据

begin运算符和end运算符

begin成员:负责返回首元素 迭代器
end成员:负责返回尾位置的下一位置元素 迭代器
如果容器为空,则begin和end返回的迭代器,都是尾后迭代器

注意点:begin()和end()返回的一定是个迭代器,要进行后续操作需要用一个迭代器变量把当前迭代器保留下来,再进行迭代器运算
图片.png

#include<bits/stdc++.h>
#include<vector>
#include<typeinfo>
using namespace std;
int main()
{    int array[]={10,20,30,40,50};
    int* pointer = array; //= &array[0]
    vector<int> A={10,20,30,40,50};
 
    cout<<"*pointer="<<*pointer<<endl;
    auto iter = A.begin(); 
    
    cout<<"vector.begin() ="<<(*iter); 
 } 
常见错误
// cout<<A.begin();<<endl; 初学者错误,迭代器返回的是迭代器
// (*A).begin(); 概念混淆,应该是对迭代器解引用,而不是对A数组解引用后再进行begin操作

迭代器运算

图片.png

迭代器指向下一元素经典错误:
// cout<<"vectoer second number ="<<*(iter++); 错误写法
必须是++iter !!!
#include<bits/stdc++.h>
#include<vector>
#include<typeinfo>
using namespace std;
int main()
{    
    vector<int> A={10,20,30,40,50};
    auto iter = A.begin(); 
    cout<<"vector first number="<<*iter<<endl; 
    cout<<"vector second number ="<<*(++iter); 
 } 

Akuaner
7 声望3 粉丝