C++有扩展运算符吗?

Lud*_*ert 3 c++ arrays spread-syntax

你能在 C++ 中做到这一点吗:

vector<int> v1={1,2}, v2={3,4};
vector<int> v3={...v1, ...v2, 5};
//v3 = {1,2,3,4,5}
Run Code Online (Sandbox Code Playgroud)

使用 C++ 执行此操作的最简单方法是什么?

P K*_*mer 6

我会用这样的辅助函数来实现它。在线演示:https: //onlinegdb.com/AnA3GkbQL 此模板代码写出获得最终结果(在编译时)所需的所有单独的 Push_back 和插入。

#include <iostream>
#include <vector>

namespace details
{
    template<typename type_t, typename arg_t, typename... args_t>
    auto make_spread_impl(std::vector<type_t>& values, const arg_t& arg, const args_t&... args)
    {
        // check if template argument is a value or a std::vector of values.
        if constexpr (std::is_same_v<arg_t, type_t>)
        {
            // single value
            values.push_back(arg);
        }
        else
        {
            // vector of values
            static_assert(std::is_same_v<std::vector<type_t>, arg_t>);

            // append values to end
            values.insert(values.end(), arg.begin(), arg.end());
        }

        // continue recursion
        if constexpr (sizeof...(args_t) > 0)
        {
            return make_spread_impl(values, args...);
        }

        // recursion end condition
        return values;
    }
}

template<typename type_t, typename... args_t>
auto make_spread(const args_t&... args)
{

    // one argument return a vector of values.
    if constexpr (sizeof...(args) == 1ul)
    {
        return std::vector<type_t>{args...};
    }
    
    // otherwise recurse
    std::vector<type_t> values;
    details::make_spread_impl(values, args...);
    return values;
}



int main()
{
    std::vector<int> v1{ 1,2,3 };
    std::vector<int> v2{ 5,6,7 };

    auto result = make_spread<int>(v1, 4, v2, 8);

    for (const auto& value : result)
    {
        std::cout << value << " ";
    }


    return 0;
}
Run Code Online (Sandbox Code Playgroud)