C 将映射复制到使用STD ::移动的向量
C++ copy map to vector with std::move
我与C 相对新手,这可能是一个愚蠢的问题,但我试图了解rValue
和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
是正确的吗?std::string
提供了一个移动构造函数,并且(可能不是用于字符串,而是用于较大的对象)移动构造函数比复制构造函数要快得多。我们也知道,我们没有在其他地方使用地图项目,并且一旦离开功能,它们就会超出范围。那我的推定是对的吗?
我看不到我的思想矛盾,但这是一个复杂的话题,我害怕错过一些东西。 P.S。:我认为问题名称不是最好的。如果您有一个更好的人可以随意编辑。
在这里使用
std::move
是正确的吗?
如果您确定将来将无法访问移动值,是的。
您可能还想使用std::vector::reserve
在v
中进行预先分配所需的空间。
v.reserve(v.size() + names.size());
在这里使用
std::move
是正确的吗?
是的。代码看起来不错。
在您显示的情况下,是的,是可以的,因为您以后不会使用地图或其值。
如果地图不是一个值(例如它是参考),或者您需要以后使用其中的值,则是错误的。
相关文章:
- vector是否为std::移动的对象连续分配内存
- std::移动触发析构函数?
- 对象传递给STD ::移动,但不会移动
- 可以std ::移动引起切片时切入L值参考
- std ::移动不要创建派生类
- 如何std ::移动boost :: multi_array
- STD ::移动性能,同时将大字符串作为rvalue
- 在哪里使用std ::移动弦
- 为什么传递std ::移动(对象)和此对象的成员函数会导致sigsegv
- 尽管参数是R值参考,但为什么使用STD ::移动
- 使用std ::移动以将unique_ptr移动到向量
- 使用STD ::移动时的内存泄漏
- C 将映射复制到使用STD ::移动的向量
- 使用std ::移动向量
- 有没有一种方法可以在不使用std ::移动的情况下初始化类构建类的类
- std ::移动返回和输入参考参数
- 只需添加任何事情都不会导致编译错误(围绕std ::移动),为什么
- 是否可以实现std ::移动和清除功能
- C 11构造函数参数:std ::移动和值或std :: forward and rvalue参考
- 我通常可以/始终使用std ::前进而不是std ::移动