鱼C论坛

 找回密码
 立即注册
查看: 1631|回复: 6

[已解决]STL的迭代器问题

[复制链接]
发表于 2022-6-15 17:51:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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;
}
最佳答案
2022-6-16 08:25:54
a327904410 发表于 2022-6-16 00:30
它不是传了地址给pBegin吗?后面的++地址变了,按道理说它应该也会变

假设指针 p 指向 q 所指向的地址(现在 p 和 q 指向相同地址)
p++ 后,q 指向的地址不变
p++ 100 次后,q 指向的地址一样不变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-15 20:58:04 From FishC Mobile | 显示全部楼层
v.begin()    v.end()   这俩标志又没有动
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-16 00:30:36 | 显示全部楼层
wp231957 发表于 2022-6-15 20:58
v.begin()    v.end()   这俩标志又没有动

它不是传了地址给pBegin吗?后面的++地址变了,按道理说它应该也会变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-16 08:25:54 From FishC Mobile | 显示全部楼层    本楼为最佳答案   
a327904410 发表于 2022-6-16 00:30
它不是传了地址给pBegin吗?后面的++地址变了,按道理说它应该也会变

假设指针 p 指向 q 所指向的地址(现在 p 和 q 指向相同地址)
p++ 后,q 指向的地址不变
p++ 100 次后,q 指向的地址一样不变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-6-16 08:46:56 From FishC Mobile | 显示全部楼层
a327904410 发表于 2022-6-16 00:30
它不是传了地址给pBegin吗?后面的++地址变了,按道理说它应该也会变

而且 v.begin() 和 v.end() 不是指针,而是函数。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-16 13:59:21 | 显示全部楼层
傻眼貓咪 发表于 2022-6-16 08:25
假设指针 p 指向 q 所指向的地址(现在 p 和 q 指向相同地址)
p++ 后,q 指向的地址不变
p++ 100 次后 ...

这样的嘛,那是我理解错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-6-16 14:06:07 | 显示全部楼层
傻眼貓咪 发表于 2022-6-16 08:25
假设指针 p 指向 q 所指向的地址(现在 p 和 q 指向相同地址)
p++ 后,q 指向的地址不变
p++ 100 次后 ...

我可能把这个和 根据地址修改值导致原来指向该地址指针的值也会改变的概念 混淆了,仔细想想地址确实不会变。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-30 04:28

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表