#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,然后是输入的数计算的结果?
c++通过迭代器输出vector对象有异常
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
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,当然事与愿违了本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 如何在scanpy上做差异基因和通路富集?
- ¥20 关于#硬件工程#的问题,请各位专家解答!
- ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
- ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
- ¥30 截图中的mathematics程序转换成matlab
- ¥15 动力学代码报错,维度不匹配
- ¥15 Power query添加列问题
- ¥50 Kubernetes&Fission&Eleasticsearch
- ¥15 報錯:Person is not mapped,如何解決?
- ¥15 c++头文件不能识别CDialog