尝试学习c ++ 17的一些新功能时遇到了fold表达式。 http://en.cppreference.com/w/cpp/language/fold
使用fold表达式我能够进行多个push_back元素。我只是尝试使用 fold表达式将多个向量合并到一个向量中。我知道还有其他方法可以做合并矢量,但想使用折叠表达式
#include <iostream>
#include <vector>
template<typename T, typename... Args>
void push_back_vec(std::vector<T>& v, Args&&... args)
{
(v.push_back(args), ...);
}
int main()
{
std::vector<int> v;
std::vector<int> m ={1,2,3};
std::vector<int> x ={4,5,6};
std::vector<int> y ={7,8,9};
//push_back_vec(v,m,x,y);
push_back_vec(v, 66, 67, 68);
for (int i : v) std::cout << i << ' ';
}
任何建议都会有所帮助
输出
66 67 68 Program ended with exit code: 0
尝试使下面的语句工作,将m,x,y向量添加到v
push_back_vec(v,m,x,y);
目前正在获取错误以下行“无匹配参数”//这是预期的
push_back_vec(v,m,x,y);
这里需要改变什么
void push_back_vec(std::vector<T>& v, Args&&... args)
答案 0 :(得分:4)
要连接2个向量,您可以
template <typename T>
void concatenate(std::vector<T>& v, const std::vector<T>& v2)
{
v.insert(v.end(), v2.begin(), v2.end());
}
所以要连接N个向量,你可以做
template <typename T, template ... Ts>
void concatenate(std::vector<T>& v, const Ts&... ts)
{
(v.insert(v.end(), ts.begin(), ts.end()), ...);
}
如果你想要相同的函数来附加值或向量,你可以添加几个重载:
template <typename T>
void append(std::vector<T>& v, const std::vector<T>& v2)
{
v.insert(v.end(), v2.begin(), v2.end());
}
template <typename T>
void append(std::vector<T>& v, const T& value)
{
v.push_back(value);
}
然后
template<typename T, typename... Args>
void push_back_vec(std::vector<T>& v, Args&&... args)
{
(Concat(v, args), ...);
}