【问题标题】:Convert 2D vector to 2d array将二维向量转换为二维数组
【发布时间】:2021-01-31 09:58:34
【问题描述】:

我有一些使用 2D 向量的 C++ 代码,需要调用一个外部库,该库使用一个指针,该数组以 rows 和 col 作为参数。所以我需要做的就是将我的 2d 矢量转换为我可以推入 foo((float *)data, int rows, int cols) 的格式。

所以二维向量数据---code---> foo((float *), int row, int cols)

使用Converting 2D vector to 2D array 尝试将二维向量转换为二维数组效果不佳 这个例子使用了双指针,我不知道如何转换成带有行和列的单指针:

vector<vector<float>> test_vect{ {1.1,2.1,3.1}, {4.1,5.1,6.1}, {7.1,8.1,9.1}, {10.1,11,12.3}, {13.1,14.1,15.1}, {16.1,17.1,18.1}};

float* getDataAsArray(vector<vector <float>> data) {
    float** temp;
    int r =  data.size();
    int c = data[0].size();
    temp = new float*[r];
    for(unsigned i=0; (i < r); i++) { 
        temp[i] = new float[c];
        for(unsigned j=0; (j < c); j++) {
            temp[i][j] = data[i][j];
        }
    }
    float* arr = *temp;
    return arr; 
}

这不起作用,因为我丢失了状态信息(它只打印第一行)。这是我将输出传递给的验证码。

void printMatrix(float *matrix, int rows, int cols)
{
    int i, j;
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            cout << *((matrix+i*cols)+j) << " ";
        }
        cout << "\n";
    }
}

有什么建议吗?

【问题讨论】:

  • 您是否需要连续数组中的值?
  • 你的问题有点太复杂了。你知道如何正确地将一个数字转换成你需要的内部格式吗?如果你这样做了 - 这只是要再做一次。
  • 是的,来自向量 -> 数组的数据必须按顺序排列。

标签: c++ arrays vector


【解决方案1】:

你可以展平向量

vector<float> flat_vect =
        accumulate(test_vect.begin(), test_vect.end(),
                   vector<float>(),
                   [](vector<float>& a, vector<float>& b) {
                       a.insert(a.end(), b.begin(), b.end());
                       return a;
                   });

然后传递扁平化版本的数据:

foo(flat_vect.data(), 6, 3);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 2020-03-26
    • 2012-08-15
    • 2020-09-10
    • 2023-04-03
    相关资源
    最近更新 更多