Concatenating two std::vectors

后端 未结 25 2608
予麋鹿
予麋鹿 2020-11-22 12:00

How do I concatenate two std::vectors?

25条回答
  •  一整个雨季
    2020-11-22 12:24

    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.

提交回复
热议问题