c++如何计算数组中的数组

4sup72z8  于 2023-03-05  发布在  其他
关注(0)|答案(2)|浏览(148)

假设我有这样代码:

int arr[] = {{1, 4}, {2}, {3, 2, 6}};

如何计算数组中的数组数,在本例中为3。如果代码不起作用,是否有办法用其他方法获得答案?
我在谷歌上搜索过,读过文章

cpjpxq1n

cpjpxq1n1#

一维数组不能包含其他数组作为其元素。
例如,您可以使用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来获取数组中的元素数。

const size_t N = sizeof( arr ) / sizeof( *arr );

N将等于3
另一种方法是使用标准容器std::vector
例如

std::vector<std::vector<int>> arr = { {1, 4}, {2}, {3, 2, 6} };

您可以使用相同的标准函数std::size( arr )或像arr.size()一样大小的成员函数。

zu0ti5jz

zu0ti5jz2#

你的代码无法工作。你声明了int类型的一维数组,并试图用嵌套的大括号括起来的初始化器列表初始化每个int元素。更重要的是,一个数组只能包含相同类型的元素。不同大小的数组是不同的类型,所以你试图暗示的是完全不可能的。
可以嵌套使用动态容器之一,例如std::vector<std::vector<int>>,但出于知识或绝对的考虑,不可避免地需要一个静态大小的数组:

int arr[][3] = {{1, 4}, {2}, {3, 2, 6}};

注意,在这种情况下,所有元素都是大小为3的数组。其余元素初始化为0。对于任何数组,以下条件成立:

count_of_subarrays = sizeof(arr)/sizeof(arr[0]);

只要这里的arr name实际上是一个数组而不是一个指针,它就可以工作。用数组的总大小除以它的第一个元素的大小。从C++17开始就有一个helper来做这个:

count_of_subarrays = std::size(arr);

不规则但静态大小的数组可以通过创建一个更复杂的结构来实现,例如,在结构中实际存储元素的大小。即,您将拥有一个元素值数组、一个大小\索引数组和重新定义的operator[]

相关问题