c++的io迭代器怎么会这样输出呢

#include<iterator>#include<iostream>intmain(){inta[3]={1,2,3};std::ostream_iterator<i... #include<iterator>
#include<iostream>

int main()
{
int a[3] = {1,2,3};
std::ostream_iterator<int, char> out_iter(std::cout);
std::istream_iterator<int, char> cin_iter(std::cin);

copy(a, a+3, out_iter); #1
a[1] = *cin_iter; #2
copy(a, a+3, out_iter); #3

return 0;
}

我的预想
123123456
11234563
按照 #1 #2 #3
会有这样的结果
可实际是
123456
12341234563
好像顺序是 #2 #1 #3

可能有点小白 这是我看c++ primer plus 学到迭代器那一章 自己瞎搞出来的
展开
 我来答
zitsen
2014-08-12 · TA获得超过226个赞
知道答主
回答量:61
采纳率:0%
帮助的人:63.5万
展开全部

针对你的程序做如下修改:

#include<iterator>
#include<iostream>
#include<algorithm> // for std::copy
int main()
{
    int a[3] = {1,2,3};
    // 添加一个空格间隔符,用于后面对输出进行判断
    std::ostream_iterator<int, char> out_iter(std::cout," ");
    // 定义一个cin迭代器
    std::istream_iterator<int, char> cin_iter(std::cin);
    
    // #1
    //  输出数组a,没有变化,所以输出:1 2 3
    std::copy(a, a+3, out_iter); //#1
    //  加一个换行;
    std::cout << std::endl;
    // #2
    //  将输入的数存储到a[1],即第二个元素
    a[1] = *cin_iter; //#2
    // #3
    //  输出当前数组a,改变了第二个元素的值:
    //  当输入123456的时候,输出结果为:1 123456 3
    //   第二个元素变化:2->123456
    std::copy(a, a+3, out_iter); //#3
    return 0;
}

所以,以上程序结果如下:

123456
1 2 3
1 123456 3

现在对照你的程序,去掉回车和换行,结果是:

123456
12311234563 #这就是你的结果

#对照看下: 1 2 3 1 123456 3

C++的很多用例可以上网搜,给你个网站

http://www.cplusplus.com/reference/iterator/istream_iterator/

felithuang
2014-08-11 · TA获得超过849个赞
知道小有建树答主
回答量:520
采纳率:50%
帮助的人:710万
展开全部
应该是在定义std::istream_iterator<int, char> cin_iter(std::cin);时就进行输入数据准备了,而不是在*cin_iter时再作数据准备。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式