繁体   English   中英

我可以将一个向量的内容移动到另一个向量的末尾吗?

[英]Can I move the contents of one vector to the end of another?

我想做类似以下的事情( ab都是vector<my_moveable_type> ):

a.insert(a.end(), b.begin(), b.end());

但我希望操作将b的元素移动到a而不是复制它们。 我找到了std::vector::emplace但这仅适用于单个元素,而不是范围。

可以这样做吗?

您可以使用std::make_move_iterator ,以便访问迭代器返回rvalue引用而不是lvalue引用:

a.insert(a.end(), std::make_move_iterator(b.begin()), std::make_move_iterator(b.end()));

有一个std::move算法似乎可以做你想要的。 在下面的代码中,源std::vector留有空字符串(向量大小不会改变)。

#include <algorithm>
#include <iostream>
#include <string>
#include <vector>

int main()
{
    std::vector<std::string> one{"cat", "dog", "newt"};
    std::vector<std::string> two;

    std::move(begin(one), end(one), back_inserter(two));

    std::cout << "one:\n";
    for (auto& str : one) {
        std::cout << str << '\n';
    }

    std::cout << "two:\n";
    for (auto& str : two) {
        std::cout << str << '\n';
    }
}

ideone.com上的工作代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM