You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二维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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 11:15:30