如何获取嵌套的std :: initializer_lists的大小?

时间:2019-04-01 09:52:22

标签: c++ c++11

std::initializer_list具有成员函数size,该函数返回初始化程序列表中的元素数量。

考虑到[]没有std::initializer_list运算符,并且用户不想使用for-loop来访问每个子列表的大小:

用户如何从std::initializer_list获得内部std::initializer_list<std::initializer_list>的大小。

例如,从下面的示例中,您能否告诉我用户如何访问第一个嵌套的initializer_list {1, 2, 3}的大小?

#include <iostream>
#include <string>

int main()
{
  std::initializer_list<std::initializer_list<int>> a = { {1, 2, 3}, {2, 3, 4} };

  std::cout << a.size() << std::endl; // Provides = 2

  // Now I want to access the size of the first nested std::initializer_list:
  // std::cout << a[0].size() << std::endl; // Does not compile

  return 0;
}

2 个答案:

答案 0 :(得分:3)

您可以利用std::initializer_list::begin

  

返回指向初始化列表中第一个元素的指针。

例如

std::cout << a.begin()->size() << std::endl;       // Provides = 3
std::cout << (a.begin() + 1)->size() << std::endl; // Provides = 3

答案 1 :(得分:1)

您可以这样做:

for(const auto& ilist: a)
   std::cout << ilist.size() << std::endl; // Compiles

请参见 Demo

如果需要,可以在for循环中将大小分配给不同的变量。