c++ - 将二维向量转换为二维数组
问题描述
我有一些使用 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尝试将 2d 向量转换为 2d 数组效果不佳 此示例使用双指针,我不知道如何转换为带有行和列的单指针:
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";
}
}
有什么建议么?
解决方案
您可以展平矢量
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);
推荐阅读
- nlp - AttributeError:“示例”对象没有属性“文本”
- junit - JunitReport - 报告格式和 styledir 不起作用
- objective-c - 从 Keychain 获取证书并使用它来创建信任
- java - JComponent 进入非空 JPanel
- java - 是否存在超过 double 数字精度的 Java 数据类型?
- scala - Scala - Spark:获取包含空值的列的列名
- reactjs - 如何创建可扩展的 graphql 查询/突变/片段结构?
- android - 带有 fontFamily 标签的 Android 自定义字体,而不是书法库
- arduino - 从 ESP8266 从机接收数据并通过 FTP 协议发送
- java - 我如何修复Java中的数组列表转换