在c++中获取不同长度的多维数组的长度?

oalqel3c  于 2023-01-15  发布在  其他
关注(0)|答案(2)|浏览(181)

我有一个多维数组,我试图得到每一列的长度,但是它对所有列都返回20。

int buttons[16][5] = {{0, 4, 1},{1, 0, 2, 5},{2, 1, 3, 6},{3, 2, 7},{4,0,5,8},{5,1,4,6,9},{6,2,5,7,10},{7,3,6,11},{8,4,9,12},{9,5,8,10,13},{10,6,9,11,14},{11,7,10,15},{12,8,13},{13,9,12,14},{14,10,13,15},{15,11,14}};

sizeof(buttons[0]);
kxxlusnw

kxxlusnw1#

您正在声明一个C样式数组,其中每个元素都是一个5个int的数组。因此,使用sizeof(buttons[0])时,您将获得5个int的大小。通常,int的大小为4字节,因此您将获得20。只有buttons[0]具有3个元素:实际上,在您的代码中,您只初始化了buttons[0]的前3个元素。
如果你想要一个多维数组,其中每个"列"都有不同的大小,你最好使用std::vector,它可以容纳可变大小的数组,然后size()会给你实际的元素数。
示例代码:

#include <iostream>
#include <vector>

int main()
{
   std::vector<int> buttons[16] = {{0, 4, 1},{1, 0, 2, 5},{2, 1, 3, 6},{3, 2, 7},{4,0,5,8},{5,1,4,6,9},{6,2,5,7,10},{7,3,6,11},{8,4,9,12},{9,5,8,10,13},{10,6,9,11,14},{11,7,10,15},{12,8,13},{13,9,12,14},{14,10,13,15},{15,11,14}};

   std::cout << buttons[0].size();
}

更好的是,您可以使用vectorvector

#include <iostream>
#include <vector>

int main()
{
    std::vector<std::vector<int>> buttons = {{0, 4, 1},{1, 0, 2, 5},{2, 1, 3, 6},{3, 2, 7},{4,0,5,8},{5,1,4,6,9},{6,2,5,7,10},{7,3,6,11},{8,4,9,12},{9,5,8,10,13},{10,6,9,11,14},{11,7,10,15},{12,8,13},{13,9,12,14},{14,10,13,15},{15,11,14}};
    
    std::cout << buttons[0].size();
}
vhmi4jdf

vhmi4jdf2#

你不能用数组来做。你可以用向量来做:

vector<vector<int> > buttons = ...;
for (auto const& button : buttons) cout << button.size() << '\n';

相关问题