我可以使用领带将一对元素放入向量中吗?

时间:2019-07-11 15:25:45

标签: c++ vector insert std-pair tie

因此,可以说我有一个类似pair<int, int> func()vector<int> vec的函数。我要这样做:

vec.resize(size(vec) + 2U);

tie(*next(rbegin(vec)), *rbegin(vec)) = func();

我只是觉得这是一种写我正在做的事情的非常复杂的方法。没有resize调用和其他所有方法,有没有办法做到这一点?

2 个答案:

答案 0 :(得分:3)

具有结构化绑定的简单C ++ 17解决方案:

std::pair<int, int> func();

int main()
{
    std::vector<int> vec;
    vec.reserve(2);

    const auto [a, b] = func();
    vec.push_back(a);
    vec.push_back(b);
}  

live example on godbolt.org


C ++ 17 Pack扩展解决方案:

const auto vec = std::apply([](auto... xs)
{
    return std::vector{xs...};
}, func());

live example on godbolt.org


C ++ 17 Pack扩展解决方案(在现有向量中):

std::vector<int> vec;
std::apply([&vec](auto... xs)
{
    (vec.push_back(xs), ...);
}, func());

答案 1 :(得分:1)

您可以改用结构化绑定(C ++ 17)和push_back

auto [elem1, elem2] = func();

vec.push_back(elem1);
vec.push_back(elem2);

那绝对是更容易阅读的方式。