填充pair-of-pair类型std::vector未达预期输出的原因
问题分析:为什么你的pair-of-pair vector输出全为0?
首先,从你贴出的代码片段来看,逻辑上是完全正确的——你正确定义了嵌套pair的vector,用std::make_pair填充元素的方式没问题,循环输出的逻辑也没有错误。正常编译运行的话,应该会输出你预期的x: 100.0 y: 10 z: 20。
那实际运行输出全0,大概率是代码执行过程中出现了你没注意到的细节问题,下面列出几种最可能的原因:
- 变量被意外修改:在
push_back之后、循环输出之前,x/y/z或者vec的元素被其他代码意外赋值为0了。比如可能有你没贴出来的逻辑,比如vec[0].first = 0;或者x = 0;之类的操作。 - 变量定义顺序出错:如果实际代码里,你把x/y/z的赋值写在了
push_back之后,那会导致使用未初始化的变量,此时输出的是随机值(刚好为0也有可能)。 - 拼写/参数错误:比如你实际写代码时,把
std::make_pair(y,z)写成了std::make_pair(0,0),或者把(double)x写成了(double)0,只是在提问时写错了代码示例。 - vector被意外清空:如果在
push_back之后不小心调用了vec.clear(),那vec的size会变成0,循环根本不会执行;但如果是resize成了某个大小但没赋值,也可能出现输出0的情况,但这种情况和你描述的输出三次0的现象不完全匹配。
你可以重点检查实际运行的代码,确认变量是否在push_back前完成了正确赋值,以及有没有后续的意外修改操作。
内容的提问来源于stack exchange,提问作者henrykorir
相关产品推荐
相关产品推荐

