使用折叠表达式合并多个向量

Har*_*ngh 0 c++ c++17

尝试学习 c++17 的一些新功能时遇到了折叠表达式。http://en.cppreference.com/w/cpp/language/fold

使用折叠表达式,我可以对元素执行多个 push_back。我只是想使用折叠表达式将多个向量合并为一个向量。我知道还有其他方法可以合并向量,但想使用折叠表达

#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 << ' ';

}
Run Code Online (Sandbox Code Playgroud)

任何建议都会有所帮助

输出

66 67 68 Program ended with exit code: 0
Run Code Online (Sandbox Code Playgroud)

尝试使以下语句起作用,将 m,x,y 向量添加到 v

 push_back_vec(v,m,x,y);
Run Code Online (Sandbox Code Playgroud)

当前出现以下行“无匹配参数”的错误//这是预期的

push_back_vec(v,m,x,y);
Run Code Online (Sandbox Code Playgroud)

这里需要改变什么

void push_back_vec(std::vector<T>& v, Args&&... args)
Run Code Online (Sandbox Code Playgroud)

Jar*_*d42 5

要连接 2 个向量,您可以执行

template <typename T>
void concatenate(std::vector<T>& v, const std::vector<T>& v2)
{
    v.insert(v.end(), v2.begin(), v2.end());
}
Run Code Online (Sandbox Code Playgroud)

所以要连接 N 个向量,你可以这样做

template <typename T, typename ... Ts>
void concatenate(std::vector<T>& v, const Ts&... ts)
{
    (v.insert(v.end(), ts.begin(), ts.end()), ...);
}
Run Code Online (Sandbox Code Playgroud)

如果您希望相同的函数附加值或向量,您可以添加几个重载:

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);
}
Run Code Online (Sandbox Code Playgroud)

进而

template<typename T, typename... Args>
void push_back_vec(std::vector<T>& v, Args&&... args)
{
    (Concat(v, args), ...);
}
Run Code Online (Sandbox Code Playgroud)

演示