完整正确代码演示:
int main()
{
vector<int> v;
for (int i = 0; i < 10; i++)
{
v.push_back(i);
}
在v数组中,有0到9的数字
//迭代器访问方法
//1、先声明你接下来可能会用到的迭代器
vector<int>::iterator;//或者直接写vector<int>::iterator vit;
//2.1直接用迭代器(如果上面提前定义了vit,下面的for循环就不用再定义了)
for (vector<int>::iterator vit = v.begin(); vit != v.end(); vit++)
{
cout << *vit;
}
return 0;
}
迭代器的概念:
迭代器本质上就是类似指针的对象,用于在容器中指示元素的位置
迭代器的使用要求:
1、当你接下来要使用迭代器时需要提前声明你要使用的那款迭代器
2、用一个变量来接收你的迭代器的值,然后就可以把他当成类似于指针的东西进行使用了
坑:
for (v.begin(); v.begin() < v.end(); v.begin()++)
{
cout << *arr2.begin();
}
如果是刚开始写,有可能就会犯这种错误了
这种错误最根本的原因在于错将begin()单纯当成了一个可移动的、指向数组开头的指针
关键分析:
1、(begin是不动的)
begin() 返回的是指向容器第一个元素的迭代器,而不是一个指针, begin() 进行递增操作,并不会使它指向容器中的下一个元素,而是仍然指向容器的第一个元素
2、(it是为了记录位置,以便之后能动)
使用 it(或者其他合适的变量名)来接收 begin() 的返回值是为了能够在循环中逐步移动并访问容器中的每个元素
it 接收 begin() 后,相当于你拿到了队伍的起始位置,并将这个位置标记存在了 it 中。接下来,你可以通过递增 it 来移动这个位置标记,就像在排队时你可以通过一步步向前走来移动你的位置标记一样
改正后做法:
for (vector<int>::iterator vit = v.begin(); vit < v.end(); vit++)
{
cout << vit;
}
但该代码仍然存在错误之处
1、判断条件使用了 <
2、函数体中打印的是指针而不是元素(vit)
关键分析:
1、在 C++ 中,使用 < 来判断迭代器是否达到容器的末尾通常是不可取的,因为这样无法确定迭代器的具体位置是否达到了末尾。迭代器虽然可以进行比较,但迭代器不像整数那样简单,因此在比较时应该使用更安全和精确的方式
2、迭代器本质上就是类似指针的对象,用于在容器中指示元素的位置。因此,当你使用迭代器来遍历容器时,需要对迭代器进行解引用以访问容器中的元素