因此,可以说我有一个函数,例如:pair<int, int> func()
和vector<int> vec
. 我想做这个:
vec.resize(size(vec) + 2U);
tie(*next(rbegin(vec)), *rbegin(vec)) = func();
我只是觉得这是一种非常复杂的方式来写我正在做的事情。有没有办法在没有resize
电话和所有这些的情况下完成这个?
具有结构化绑定的简单 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包扩展解决方案:
const auto vec = std::apply([](auto... xs)
{
return std::vector{xs...};
}, func());
C++17 包扩展解决方案(在现有向量中):
std::vector<int> vec;
std::apply([&vec](auto... xs)
{
(vec.push_back(xs), ...);
}, func());
您可以使用结构化绑定 (C++17),push_back
而是:
auto [elem1, elem2] = func();
vec.push_back(elem1);
vec.push_back(elem2);
这绝对更容易阅读。