|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
问下下面三种遍历为什么都能输出答案,按道理来说指针指向的地址遍历的时候不是加了吗?怎么会回到第一个元素了?
- #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;
- }
复制代码
a327904410 发表于 2022-6-16 00:30
它不是传了地址给pBegin吗?后面的++地址变了,按道理说它应该也会变
假设指针 p 指向 q 所指向的地址(现在 p 和 q 指向相同地址)
p++ 后,q 指向的地址不变
p++ 100 次后,q 指向的地址一样不变
|
|