如果我想創建一個接受載體或初始化列表,所以像初始化列表C++ 11
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}});
我得到一個錯誤。
如果我想創建一個接受載體或初始化列表,所以像初始化列表C++ 11
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}});
我得到一個錯誤。
是的,是這樣的:
#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
你應該選用標準庫的方式與迭代器養活函數的值的序列。如果需要,還可以添加包裝以便於使用矢量或初始化程序列表進行調用。
#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);
}
這些函數做不同的事情。一個取左值,另一個不取。 –
我打算在它之前加一個const。固定。 – Opt