【问题标题】:Multiple dimensions on indexof array [closed]索引数组的多个维度[关闭]
【发布时间】:2023-02-25 17:26:31
【问题描述】:

任何人都可以提供帮助,我如何在 C++ 中声明这种类型的数组?

{2, {3, 4}, {5, {6, 76, 5, {3, 4, 6}}}}

C++支持这种类型的声明吗??如果是,那么我们如何申报。

【问题讨论】:

  • 你问的是如何,但更重要的是你想建模什么。你能解释一下吗?因为数组/向量可能不是最好的方法
  • 在 C++ 中,数组的所有项必须具有相同的类型。
  • @user253751:幸运的是std::variant 可以制作相同类型的所有内容。请参阅下面我的精彩回答。

标签: c++ arrays algorithm multidimensional-array


【解决方案1】:

上面给定的初始化列表不能用于嵌套数组。

如果您想将它用于嵌套的 4d 数组,则需要添加更多括号。

您定义了一个结构。

这可以像下面这样建模:


#include <vector>

struct I1 {
    int i1, i2, i3;
    std::vector<int> v1;
};
struct I2 {
    int i2;
    I1 i1;
};
struct I3 {
    int i3;
    std::vector<int> v3;
    I2 i2;
};

int main() {
    I3 i3{ 2, { 3, 4 }, { 5, {6, 76, 5, {3, 4, 6}} } };
}

我的强烈猜测是,这不会回答您的问题。因此,获取有关您想要实现的目标的更多信息非常重要。

【讨论】:

    【解决方案2】:

    如果你做不到,那不是 C++。 在你下地狱之前,也许你会想一想你为什么需要这个结构。也许在介绍这样一个怪物之前告诉我们你想要实现什么。我很确定这段代码无法通过代码审查。

    #include <iostream>
    #include <array>
    #include <variant>
    
    int main() {
        std::array< 
            std::variant<
                int, 
                std::array<int, 2>, 
                std::array<
                    std::variant<
                        int, 
                        std::array< 
                            std::variant <
                                int, 
                                std::array<int, 3> 
                            >
                        ,4>
                    >
                ,2>
            >
            ,3> 
        holy
             {2, 
             std::array<int,2>{3, 4}, 
             std::array<
                    std::variant<
                        int, 
                        std::array< 
                            std::variant <
                                int,
                                std::array<int, 3>
                            >
                        ,4>
                    >
                ,2>
                {5, 
                std::array< 
                            std::variant <
                                int, 
                                std::array<int, 3> 
                            >
                        ,4>
                        {6, 76, 5, std::array<int, 3>{3, 4, 6}}
                }
             };
        std::cout << std::get<0>(holy[0]); // 2
        std::cout << std::get<1>(holy[1])[0]; // 3
        std::cout << std::get<1>(holy[1])[1]; // 4
        std::cout << std::get<0>(std::get<0>(std::get<2>(holy[2]))); // 5
    }
    

    Try it on GodboltHow it looks with 1 statement per line

    【讨论】:

    • 拜托,解决这个问题真是太有趣了。不需要那么多的否决票。
    猜你喜欢
    • 1970-01-01
    • 2016-04-05
    • 2012-06-19
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2017-07-17
    相关资源
    最近更新 更多