如果我想创建一个接受向量或初始化列表的函数,那么像
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}});
我收到错误。
答案 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);
}