将数组放入另一个数组

时间:2011-08-30 10:46:10

标签: c++ arrays

如何将数组列表存储到另一组数组中?我试过这种方式,但它不起作用。

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};,它允许我编译,但我没有得到我想要的结果。

我做错了什么? 感谢。

5 个答案:

答案 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)};

值得注意的是,在此操作之后,data1data2将会移动到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