How do I concatenate two std::vector
s?
Here's a general purpose solution using C++11 move semantics:
template
std::vector concat(const std::vector& lhs, const std::vector& rhs)
{
if (lhs.empty()) return rhs;
if (rhs.empty()) return lhs;
std::vector result {};
result.reserve(lhs.size() + rhs.size());
result.insert(result.cend(), lhs.cbegin(), lhs.cend());
result.insert(result.cend(), rhs.cbegin(), rhs.cend());
return result;
}
template
std::vector concat(std::vector&& lhs, const std::vector& rhs)
{
lhs.insert(lhs.cend(), rhs.cbegin(), rhs.cend());
return std::move(lhs);
}
template
std::vector concat(const std::vector& lhs, std::vector&& rhs)
{
rhs.insert(rhs.cbegin(), lhs.cbegin(), lhs.cend());
return std::move(rhs);
}
template
std::vector concat(std::vector&& lhs, std::vector&& rhs)
{
if (lhs.empty()) return std::move(rhs);
lhs.insert(lhs.cend(), std::make_move_iterator(rhs.begin()), std::make_move_iterator(rhs.end()));
return std::move(lhs);
}
Note how this differs from appending to a vector
.