faustismarck 2017-09-20 13:22 采纳率: 100%
浏览 1406
已采纳

c++通过迭代器输出vector对象有异常

#include
#include
#include
#include
using namespace std;
int main()
{
vector a(10,1);
/*int b;
while(cin>>b)
a.push_back(b);*/
for (auto d=a.begin();d!=a.end();++d){
d=2;
cout << *d <<" ";}
cout<<endl;
return 0;
}
如果加上中间被注释掉的那段,输出会先输出10个2,然后输出输入个数的正常结果,求教为什么?为什么不是输出没有被push_back的数运算得到的2,然后是输入的数计算的结果?

  • 写回答

2条回答

  • 四夕丶 2017-09-21 09:45
    关注

    我不知道你代码放上来的时候有没有复制错,我就你贴上来的这个代码来谈谈
    首先你定义了一个(应该是int型的吧?csdn会把尖括号后面的东西屏蔽掉)int型的vector a(10,1)
    也就是一个包含十个数字1的int数组
    然后while(cin>>b)a.push_back(b); push_back()是在vector尾部加入一个数据。
    然后是for (auto d=a.begin();d!=a.end();++d){8 d=2; cout << *d <<" ";}
    这行代码就是问题所在了
    a.begin()定位到vector数组第一个元素的位置,a.end()定位到尾部后一个位置,一前一后也就是整个数组了(包括新添加进去的)
    然后是*d=2(你原代码是d=2,贴错了?)把所有元素都赋值为2
    那结果就显而易见了,你把所有元素都赋值为2,当然事与愿违了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 matlab有关常微分方程的问题求解决
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?
  • ¥100 求三轴之间相互配合画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable