| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 386 人关注过本帖
标题:关于vector的end()问题
只看楼主 加入收藏
gobraves
Rank: 2
等 级:论坛游民
帖 子:46
专家分:16
注 册:2013-8-3
结帖率:88.89%
收藏
已结贴  问题点数:10 回复次数:4 
关于vector的end()问题
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    vector<int> x(10);

    for(vector<int>::iterator i=x.end()-1;i!=x.begin();i--)
        {
            *i=42;
        }
        for(int i=0;i<10;i++)
        {
            cout<<x[i]<<" ";
        if((i+1)%6==0)
            cout<<endl;

        }

    return 0;
}


输出结果 0 42 42 42 42 42
42 42 42 42;

    for(vector<int>::iterator i=x.end()-1;i!=x.begin();i--)
为什么第一个元素为0,end()不是指向最后一个元素的末端吗?end()-1应该就是指向最后一个元素了啊?
请各位解答下,谢谢!!
搜索更多相关主题的帖子: include return 
2014-03-17 16:34
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:10 
听不懂你的解释,你的循环条件是 i!=x.begin(),也就是 第一个元素没有做 *i=42,这和 end() 有啥关系?
2014-03-17 16:37
gobraves
Rank: 2
等 级:论坛游民
帖 子:46
专家分:16
注 册:2013-8-3
收藏
得分:0 
回复 2楼 rjsp
就是输出的第一个结果是0,不知道为什么?
  我用  for(vector<int>::iterator i=x.begin();i!=x.end();i++)
就不会有这个问题
2014-03-17 16:49
gobraves
Rank: 2
等 级:论坛游民
帖 子:46
专家分:16
注 册:2013-8-3
收藏
得分:0 
回复 2楼 rjsp
那时候迷糊了,谢谢了
2014-03-17 21:54
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9008
专家分:53957
注 册:2011-1-18
收藏
得分:0 
回复 4楼 gobraves
其实 x.end()-1 属于未定义行为,你应该用 rbegin() 和 rend() 进行逆向遍历
2014-03-18 08:12
快速回复:关于vector的end()问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016667 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved