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

如何在C++中将二维顶点数组转换为一维xy值数组

C++ 二维数组展平为一维数组实现方案

下面分两种常见的使用场景给出可直接运行的稳定实现:

场景1:原生固定大小二维数组

如果你的二维数组是编译期就确定行列数的原生数组,可以直接通过双层遍历实现:

#include <iostream>
#include <vector>

int main() {
    // 示例3行2列二维数组
    int two_dim[3][2] = {{1,2}, {3,4}, {5,6}};
    const int rows = 3;
    const int cols = 2;
    
    // 提前分配好一维数组空间,大小为行数*列数
    int one_dim[rows * cols];
    // 也可以用vector做动态存储:std::vector<int> one_dim; one_dim.reserve(rows*cols);

    for(int i = 0; i < rows; i++) {
        for(int j = 0; j < cols; j++) {
            // 按行优先顺序填充一维数组,也就是你需要的[x,y,a,b,z,e]顺序
            one_dim[i * cols + j] = two_dim[i][j];
            // 如果用vector的话写成 one_dim.push_back(two_dim[i][j]);
        }
    }

    // 测试输出
    for(int num : one_dim) {
        std::cout << num << " ";
    }
    return 0;
}

运行输出为 1 2 3 4 5 6,完全符合你需要的格式。

场景2:vector嵌套实现的动态二维数组

如果你的二维数组是运行时才确定大小,用std::vector<std::vector<T>>存储的,实现逻辑和上面一致,同时兼容不同子数组长度的情况:

#include <iostream>
#include <vector>

int main() {
    std::vector<std::vector<int>> two_dim = {{1,2}, {3,4}, {5,6}};
    std::vector<int> one_dim;
    // 提前预分配空间提升性能
    size_t total_size = 0;
    for(auto &sub_arr : two_dim) {
        total_size += sub_arr.size();
    }
    one_dim.reserve(total_size);

    for(auto &sub_arr : two_dim) {
        // 直接将子数组的所有元素追加到一维数组末尾,不需要手动写内层索引遍历
        one_dim.insert(one_dim.end(), sub_arr.begin(), sub_arr.end());
    }

    // 测试输出
    for(int num : one_dim) {
        std::cout << num << " ";
    }
    return 0;
}

这个实现即使子数组长度不一致也不会出错,稳定性更强。

注意事项

  • 如果你需要的是按列优先展平(比如输出1,3,5,2,4,6),只需要把双层遍历的顺序调换,先遍历列再遍历行即可
  • 访问数组元素前确认索引没有超过行列边界,避免出现内存越界错误

内容的提问来源于stack exchange,提问作者Farouk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 05:18:04