假设我有这样代码:
int arr[] = {{1, 4}, {2}, {3, 2, 6}};
如何计算数组中的数组数,在本例中为3。如果代码不起作用,是否有办法用其他方法获得答案?我在谷歌上搜索过,读过文章
cpjpxq1n1#
一维数组不能包含其他数组作为其元素。例如,您可以使用std::initializer_list<int>作为元素类型,而不是类型int。这是一个演示程序。
std::initializer_list<int>
int
#include <iostream> #include <initializer_list> #include <iterator> int main() { std::initializer_list<int> arr[] = { {1, 4}, {2}, {3, 2, 6} }; std::cout << "The array contains " << std::size(arr) << " lists\n"; for (const auto &list : arr) { std::cout << '\t' << std::size(list) << ": "; for (const auto &item : list) { std::cout << item << ' '; } std::cout << '\n'; } }
程序输出为
The array contains 3 lists 2: 1 4 1: 2 3: 3 2 6
否则你可以声明一个二维数组
int arr[][3] = {{1, 4}, {2}, {3, 2, 6}};
在这种情况下,数组的每个元素都具有int[3]类型。同样,您可以使用标头<iterator>中声明的标准C++函数std::size来获取数组中的元素数。
int[3]
<iterator>
std::size
const size_t N = sizeof( arr ) / sizeof( *arr );
N将等于3。另一种方法是使用标准容器std::vector。例如
N
3
std::vector
std::vector<std::vector<int>> arr = { {1, 4}, {2}, {3, 2, 6} };
您可以使用相同的标准函数std::size( arr )或像arr.size()一样大小的成员函数。
std::size( arr )
arr.size()
zu0ti5jz2#
你的代码无法工作。你声明了int类型的一维数组,并试图用嵌套的大括号括起来的初始化器列表初始化每个int元素。更重要的是,一个数组只能包含相同类型的元素。不同大小的数组是不同的类型,所以你试图暗示的是完全不可能的。可以嵌套使用动态容器之一,例如std::vector<std::vector<int>>,但出于知识或绝对的考虑,不可避免地需要一个静态大小的数组:
std::vector<std::vector<int>>
注意,在这种情况下,所有元素都是大小为3的数组。其余元素初始化为0。对于任何数组,以下条件成立:
count_of_subarrays = sizeof(arr)/sizeof(arr[0]);
只要这里的arr name实际上是一个数组而不是一个指针,它就可以工作。用数组的总大小除以它的第一个元素的大小。从C++17开始就有一个helper来做这个:
arr
count_of_subarrays = std::size(arr);
不规则但静态大小的数组可以通过创建一个更复杂的结构来实现,例如,在结构中实际存储元素的大小。即,您将拥有一个元素值数组、一个大小\索引数组和重新定义的operator[]
operator[]
2条答案
按热度按时间cpjpxq1n1#
一维数组不能包含其他数组作为其元素。
例如,您可以使用
std::initializer_list<int>
作为元素类型,而不是类型int
。这是一个演示程序。
程序输出为
否则你可以声明一个二维数组
在这种情况下,数组的每个元素都具有
int[3]
类型。同样,您可以使用标头
<iterator>
中声明的标准C++函数std::size
来获取数组中的元素数。N
将等于3
。另一种方法是使用标准容器
std::vector
。例如
您可以使用相同的标准函数
std::size( arr )
或像arr.size()
一样大小的成员函数。zu0ti5jz2#
你的代码无法工作。你声明了
int
类型的一维数组,并试图用嵌套的大括号括起来的初始化器列表初始化每个int
元素。更重要的是,一个数组只能包含相同类型的元素。不同大小的数组是不同的类型,所以你试图暗示的是完全不可能的。可以嵌套使用动态容器之一,例如
std::vector<std::vector<int>>
,但出于知识或绝对的考虑,不可避免地需要一个静态大小的数组:注意,在这种情况下,所有元素都是大小为3的数组。其余元素初始化为0。对于任何数组,以下条件成立:
只要这里的
arr
name实际上是一个数组而不是一个指针,它就可以工作。用数组的总大小除以它的第一个元素的大小。从C++17开始就有一个helper来做这个:不规则但静态大小的数组可以通过创建一个更复杂的结构来实现,例如,在结构中实际存储元素的大小。即,您将拥有一个元素值数组、一个大小\索引数组和重新定义的
operator[]