如何将数组列表存储到另一组数组中?我试过这种方式,但它不起作用。
float data1[5] = {150.0, 203.0, 165.0, 4.0, 36.0};
float data2[5] = {249.0, 255.0, 253.0, 104.0, 2.0};
float allData[2] = {data1, data2};
cout << allData[1][2] << endl; //this should print 253.0 but it has error
这不允许我编译。我也尝试将其更改为float *allData[2] = {data1, data2};
,它允许我编译,但我没有得到我想要的结果。
我做错了什么? 感谢。
答案 0 :(得分:6)
你应该使用向量(这个例子在C ++ 11中):
std::vector<float> data1 = {150.0, 203.0, 165.0, 4.0, 36.0};
std::vector<float> data2 = {249.0, 255.0, 253.0, 104.0, 2.0};
std::vector<std::vector<float>> allData = {data1, data2};
std::cout << allData[0][0] << std::endl;
注意:可能你想在allData中存储指向vector的指针以防止复制数据,但你应该总是注意这样的结构,因为这可能很快导致悬空指针。顺便提一下,这也是普通阵列的解决方案。
编辑,正如R. Martinho Fernandes在评论中提到的那样:
您可以将allData
的构造更改为:
std::vector<std::vector<float>> allData = {std::move(data1), std::move(data2)};
值得注意的是,在此操作之后,data1
和data2
将会移动到allData
。如果您不再需要它们,那么这是首选的版本(没有指针,没有复制)。
答案 1 :(得分:4)
您无法将已存在的数组存储到另一个数组中,因为无法移动数组对象。您可以形成一个或多个数组:
float allData[][5] =
{
{150.0, 203.0, 165.0, 4.0, 36.0},
{249.0, 255.0, 253.0, 104.0, 2.0}
};
或者你可以使你的第二个数组成为指向前一个数组的指针数组。
float *allData[] = { data1, data2 };
甚至:
float (*allData[])[5] = { &data1, &data2 };
对于上述所有情况,表达式allData[1][2]
应该产生float
值253(第二个数组的第三个元素)。
答案 2 :(得分:0)
您希望float[2][]
用于多维数组。
答案 3 :(得分:0)
float data1[5] = {150.0, 203.0, 165.0, 4.0, 36.0};
float data2[5] = {249.0, 255.0, 253.0, 104.0, 2.0};
float** allData = new float*[2];
allData[0] = &data1[0];
allData[1] = &data2[0];
cout << allData[1][2] << endl; //prints 253.0
答案 4 :(得分:0)
使用float *allData [2]
是您正在寻找的正确方法。使用DevStudio 2010试用代码对我来说很有用。你得到了什么输出,你期待什么。
我得到253
作为输出,你期待253.0
吗?在这种情况下,您需要指定浮点数的输出格式:
cout.precision (1);
cout.setf (ios::fixed, ios::floatfield);
cout << allData[1][2] << endl; // this prints 253.0