用于 For 循环的数组数组

Array of Arrays for use in a For loop

array<string, 7> month31={"January","March","May","July","August","October","December"};
array<string, 4> month30 ={"April","June","September","November"};
array<string, 1> month29 = {"February"};
array<string, 1> month28 = {"February"};
array<string, 4> months= {month31,month30,month29,month28}; 

我知道 python 这会起作用,但它总是崩溃。我缺少语法吗? 最终目标是使用 for 循环在数组之间移动,但如果我不能及时弄清楚,我将不得不对所有内容进行硬编码,这将是一件痛苦的事情。

您将 months 声明为(四个)字符串数组,但您想用(字符串)数组对其进行初始化 - 类型不匹配。更重要的是,您希望将所有这些数组放在一个数组中,尽管它们的大小各不相同。即使使用 auto 也行不通。

你可以做的是使用 vector,例如:

vector<string> month31 = {"January","March","May","July","August","October","December"};
vector<string> month30 ={"April","June","September","November"};
vector<string> month29 = {"February"};
vector<string> month28 = {"February"};
vector<vector<string>> months= {month31,month30,month29,month28};

您最好使用 std::vector<std::string> 作为您的(个人)月份列表,然后使用 std::array< std::vector<string> > 作为您的组合(请注意 std::arraystd::array<string, n> 将要求元素数组的长度都相同。

这是一个简短的说明性示例:

#include <iostream>
#include <string>
#include <array>
#include <vector>

int main()
{
    std::vector<std::string> month31 = { "January","March","May","July","August","October","December" };
    std::vector<std::string> month30 = { "April","June","September","November" };
    std::vector<std::string> month29 = { "February" };
    std::vector<std::string> month28 = { "February" };
    // The composite list can be a container of the above vector types ...
    std::array< std::vector<std::string>, 4 > months = { month31, month30, month29, month28 };

    for (auto& vec : months) { // Take REFERENCES (&) to avoid copying.
        std::cout << "--- Next List... ---" << std::endl;
        for (auto& month : vec) {
            std::cout << month << std::endl;
        }
    }
    return 0;
}

或者,您也可以使用 std::vector 进行合成;上面代码中的所有其他行都不变,只需将其用于 months:

的声明
   std::vector< std::vector<std::string> > months = { month31, month30, month29, month28 };

vectorarray 之间的(主要)区别在于,对于 array,大小在编译时是 固定的 时间并指定为 template parameter,也是对象实际 type 的一部分。因此,对于不同长度的 4 个组件,将每个组件定义为 std::array 将使它们成为 4(或实际上是 3)different 类 的类型(因此它们不适合作为 'composite' array / vector 容器的成员。