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