C ++ 11中的初始化列表

时间:2014-01-30 06:21:43

标签: c++11 initializer-list

如果我想创建一个接受向量或初始化列表的函数,那么像

void fun(const vector<int>& v);
void fun(initializer_list<int> v);

来创建2个单独的函数吗?或者我可以通过创建一个函数来解决这个问题吗?

编辑:

如果我想要

怎么办?
void fun(const vector<vector<int>>& v);

如果我通过此功能

fun({{1, 2}, {3, 4}});

我收到错误。

2 个答案:

答案 0 :(得分:4)

是的,就像这样:

#include <iostream>
#include <vector>
using namespace std;

void fun(const vector<int>& v)
{
  for (auto x = v.begin(); x != v.end(); ++x) cout << " " << *x;
  cout << endl;
}

int main()
{
  std::vector<int> foo { 4,5,6 };
  fun({1,2,3});
  fun(foo);
}

运行它

$ g++ -std=c++11 test.cpp
$ ./a.out 
 1 2 3
 4 5 6

答案 1 :(得分:0)

您应该更喜欢使用带有迭代器的标准库方法来为函数提供一系列值。如果需要,可以使用向量或初始化列表添加包装器以便于调用。

#include <iostream>
#include <vector>
#include <initializer_list>

template <typename it__>
void fun( it__ bgn, it__ end ) {
  while ( bgn != end )
    std::cout << " " << *bgn++;
  std::cout << std::endl;
}

void fun( std::initializer_list<int> seq ) {
  fun( begin(seq), end(seq) );
}
void fun( std::vector<int> const & seq ) {
  fun( begin(seq), end(seq) );
}

int main() {
  std::vector<int> foo { 4,5,6 };
  fun({1,2,3});
  fun(foo);
}