【问题标题】:Array of Arrays for use in a For loop用于 For 循环的数组数组
【发布时间】:2021-09-16 20:41:47
【问题描述】:
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 循环在数组之间移动,但如果我无法及时解决这个问题,我将不得不对其进行硬编码,这将是一件很痛苦的事情。

【问题讨论】:

  • 我认为您需要添加更多详细信息 - 例如一些使用您的“数组”的代码。但是您最好使用std::vector&lt;string&gt; 作为您的列表,然后使用array(或vector):array&lt; vector&lt;string&gt;, 4 &gt; months = { month31, month30, month29, month28 };。 (array 对象的 array 将要求元素数组的长度都相同。)

标签: c++ arrays arraylist


【解决方案1】:

您最好将std::vector&lt;std::string&gt; 用于您的(个人)月份列表,然后将std::array&lt; std::vector&lt;string&gt; &gt; 用于您的组合(请注意,std::array&lt;string, n&gt;std::array 将要求元素数组都是长度相同)。

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

#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 的大小也是对象的实际类型的一部分。因此,对于您的 4 个不同长度的组件,将每个组件定义为 std::array 将使它们成为 4 个(或实际上是 3 个)不同类的类型(因此它们不适合作为 '复合材料'array / vector 容器)。

【讨论】:

    【解决方案2】:

    您将 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};
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-03
      • 1970-01-01
      • 1970-01-01
      • 2017-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多