假设我有一堆scala> val (start, end) = a.reverse.span(!_.contains("2"))
start: Array[String] = Array(Z)
end: Array[String] = Array(IY2, S, AH0, TH, N, EH1, ER0, P, D, N, EH1)
scala> val result = end.take(1) ++ start.reverse
result: Array[String] = Array(IY2, Z)
类型的二维数组,像这样:
bool[4][4]
,我想创建一个名为class A
{
public:
static const int SIZE = 4;
static constexpr bool blocks_S[SIZE][SIZE]={ {0,1,1,0},
{1,1,0,0},
{0,0,0,0},
{0,0,0,0}};
static constexpr bool blocks_SR[SIZE][SIZE] = { {1,1,0,0},
{0,1,1,0},
{0,0,0,0},
{0,0,0,0}};
static constexpr bool blocks_L[SIZE][SIZE] = { {0,0,1,0},
{1,1,1,0},
{0,0,0,0},
{0,0,0,0}};
static constexpr bool blocks_LR[SIZE][SIZE] = {{1,1,1,0},
{0,0,1,0},
{0,0,0,0},
{0,0,0,0}};
static constexpr bool blocks_Box[SIZE][SIZE] = {{1,1,0,0},
{1,1,0,0},
{0,0,0,0},
{0,0,0,0}};
static constexpr bool blocks_Bar[SIZE][SIZE] = {{1,1,1,1},
{0,0,0,0},
{0,0,0,0},
{0,0,0,0}};
};
的数组,该数组包含对所有这两个二维数组的引用,因此我可以例如执行:block_types
和接收:block_types[0]
。如何构造这样的数组(不使用blocks_S
等),类型std::vector
应该是什么?我尝试了block_types
,但选择了错误的类型。
auto
答案 0 :(得分:5)
数组的初始化程序必须是元素值的大括号列表-这是递归应用的。初始化程序不能是另一个数组。换句话说,不可能通过给一个本身就是数组的初始化程序来初始化数组的多个元素。
如果您需要两个具有相同内容的独立数组,则必须为它们提供相同的初始化程序:通过两次将其写入,或使用#define
宏,或通过constexpr函数生成初始化程序。
要满足您的要求:
例如,我可以做:block_types [0],接收:blocks_S
您不需要创建另一个数组;您可以使用一个指针数组:
using row_t = const bool[A::size];
row_t *block_types[] = { A::blocks_S, A::blocks_SR,
A::blocks_L, A::blocks_LR,
A::blocks_Box, A::blocks_Bar};
之后,block_types[0]
的使用方式类似于A::blocks_S
。