C++ 使用 std::move 将映射复制到向量

2024-05-01

我对 C++ 比较陌生,这可能是一个愚蠢的问题,但我试图理解rValue and lValue目前的参考文献,我想到了这一点:

假设我们有一个地图(来自数据库或其他什么),我们想要将其所有值复制到向量中。

void insertItems(std::vector<std::string>& v)
{
    std::map<int, std::string> names = loadFromDb();

    for (auto& kv : names )
    {
        v.push_back(std::move(kv.second));
    }
}

使用是否正确std::move here? std::string提供移动构造函数(可能不是针对字符串,而是针对较大的对象)移动构造函数比复制构造函数快得多。我们还知道,我们不会在其他地方使用地图的项目,一旦我们离开该函数,它们就会超出范围。那么我的推测对吗?

我看不出我的想法有什么矛盾,但这是一个复杂的话题,我担心会错过一些东西。P.S.:我认为问题名称不是最好的。如果您有更好的,请随时编辑它。


使用是否正确std::move http://en.cppreference.com/w/cpp/utility/move here?

如果您确定将来不会访问移动的值,那么是的。


您可能还想使用std::vector::reserve http://en.cppreference.com/w/cpp/container/vector/reserve预先分配所需的空间v.

v.reserve(v.size() + names.size());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 使用 std::move 将映射复制到向量 的相关文章

随机推荐