3

因此,可以说我有一个函数,例如:pair<int, int> func()vector<int> vec. 我想做这个:

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

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

我只是觉得这是一种非常复杂的方式来写我正在做的事情。有没有办法在没有resize电话和所有这些的情况下完成这个?

4

2 回答 2

4

具有结构化绑定的简单 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);
}  

godbolt.org 上的实时示例


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

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

godbolt.org 上的实时示例


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

std::vector<int> vec;
std::apply([&vec](auto... xs)
{
    (vec.push_back(xs), ...);
}, func());
于 2019-07-11T15:37:05.403 回答
1

您可以使用结构化绑定 (C++17),push_back而是:

auto [elem1, elem2] = func();

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

这绝对更容易阅读。

于 2019-07-11T15:36:56.193 回答