STL的迭代器问题
问下下面三种遍历为什么都能输出答案,按道理来说指针指向的地址遍历的时候不是加了吗?怎么会回到第一个元素了?{:10_266:}#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void print(int val) {
cout << val << " ";
}
void test() {
vector<int> v; // 创建 vector 容器对象,并通过模板参数指定容器中存放数据的类型
v.push_back(1); // 向容器中放数据(尾插法)
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
/* 每个容器都有自己的迭代器,迭代器是用来遍历容器中的元素
v.begin() 返回迭代器,这个迭代器指向容器中第一个数据
v.end() 返回迭代器,这个迭代器指向容器最后一个元素的下一个位置
vector<int>::iterator 拿到 vector<int> 这种容器的迭代器类型
*/
// 第一种遍历方法
vector<int>::iterator pBegin = v.begin(); // v.begin() 相当于指针
vector<int>::iterator pEnd = v.end();
while (pBegin != pEnd) {
cout << *pBegin << " ";
pBegin++;
}
cout << endl;
// 第二种遍历方法
for (vector<int>::iterator it = v.begin(); it != v.end(); it++) {
cout << *it << " ";
}
cout << endl;
// 第三种遍历方法
for_each(v.begin(), v.end(), print);
cout << endl;
}
int main() {
test();
return 0;
} v.begin() v.end() 这俩标志又没有动 wp231957 发表于 2022-6-15 20:58
v.begin() v.end() 这俩标志又没有动
它不是传了地址给pBegin吗?后面的++地址变了,按道理说它应该也会变 a327904410 发表于 2022-6-16 00:30
它不是传了地址给pBegin吗?后面的++地址变了,按道理说它应该也会变
假设指针 p 指向 q 所指向的地址(现在 p 和 q 指向相同地址)
p++ 后,q 指向的地址不变
p++ 100 次后,q 指向的地址一样不变 a327904410 发表于 2022-6-16 00:30
它不是传了地址给pBegin吗?后面的++地址变了,按道理说它应该也会变
而且 v.begin() 和 v.end() 不是指针,而是函数。 傻眼貓咪 发表于 2022-6-16 08:25
假设指针 p 指向 q 所指向的地址(现在 p 和 q 指向相同地址)
p++ 后,q 指向的地址不变
p++ 100 次后 ...
这样的嘛,那是我理解错了 傻眼貓咪 发表于 2022-6-16 08:25
假设指针 p 指向 q 所指向的地址(现在 p 和 q 指向相同地址)
p++ 后,q 指向的地址不变
p++ 100 次后 ...
我可能把这个和 根据地址修改值导致原来指向该地址指针的值也会改变的概念 混淆了,仔细想想地址确实不会变。。。{:10_333:}
页:
[1]