二维std::vector输出异常:循环迭代始终返回首组坐标求助
问题:vector存储坐标后输出始终重复第一组值
我在输出自己创建的vector数据时遇到了问题。这段代码本应在主循环的每次迭代中输出最新的坐标组,但却始终输出第一组[0,1],而非预期的[0,1]、[1,2]、[2,3]等结果。
原代码
#include <iostream> #include <cmath> #include <vector> using namespace std; int main() { vector<double> XY; vector<vector<double>> Cords; for (double i = 0; i < 10; i++) { cout << i << "\n"; for (double j = 0; j < 1; j++) { double X = i; double Y = i + 1; XY.push_back(X); XY.push_back(Y); Cords.push_back(XY); } cout << "[" << Cords[i][0] << "," << Cords[i][1] << "]" << "\n"; } }
原输出
0 [0,1] 1 [0,1] 2 [0,1] 3 [0,1] 4 [0,1] 5 [0,1] 6 [0,1] 7 [0,1] 8 [0,1] 9 [0,1]
问题分析
你犯了一个关键错误:每次循环都在同一个XY向量里追加元素,然后把这个向量的当前状态存入Cords。但你输出时始终取每个子向量的第0和第1个元素,而第一次循环后XY的前两个元素就是0和1,后续每次追加新元素后,子向量的前两位并没有改变,所以输出一直是[0,1]。
举个具体例子:
- 第1次循环后,
XY是[0,1],Cords[0]就是[0,1] - 第2次循环后,
XY变成[0,1,1,2],Cords[1]就是[0,1,1,2],你取Cords[1][0]和Cords[1][1]自然还是0和1
另外,内层的for (double j = 0; j < 1; j++)循环完全多余,它只执行一次,没必要保留。
修复方案
方案1:循环内新建XY向量
把XY的定义放到外层循环内部,每次循环都创建一个全新的向量,确保存入Cords的只有当前坐标:
#include <iostream> #include <vector> using namespace std; int main() { vector<vector<double>> Cords; for (double i = 0; i < 10; i++) { cout << i << "\n"; vector<double> XY; // 每次循环初始化新的XY double X = i; double Y = i + 1; XY.push_back(X); XY.push_back(Y); Cords.push_back(XY); cout << "[" << Cords[i][0] << "," << Cords[i][1] << "]" << "\n"; } }
方案2:存入后清空XY
如果要保留XY在外部定义,每次把XY存入Cords后,调用XY.clear()清空,准备下一次循环的坐标存储:
#include <iostream> #include <vector> using namespace std; int main() { vector<double> XY; vector<vector<double>> Cords; for (double i = 0; i < 10; i++) { cout << i << "\n"; double X = i; double Y = i + 1; XY.push_back(X); XY.push_back(Y); Cords.push_back(XY); XY.clear(); // 清空XY,避免下次追加旧元素 cout << "[" << Cords[i][0] << "," << Cords[i][1] << "]" << "\n"; } }
内容的提问来源于stack exchange,提问作者Dan Tea
相关产品推荐
相关产品推荐

