因此,可以说我有一个类似pair<int, int> func()
和vector<int> vec
的函数。我要这样做:
vec.resize(size(vec) + 2U);
tie(*next(rbegin(vec)), *rbegin(vec)) = func();
我只是觉得这是一种写我正在做的事情的非常复杂的方法。没有resize
调用和其他所有方法,有没有办法做到这一点?
答案 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);
}
C ++ 17 Pack扩展解决方案:
const auto vec = std::apply([](auto... xs)
{
return std::vector{xs...};
}, func());
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);
那绝对是更容易阅读的方式。