使用std::移动
Using std::move
在C++11
之前,我使用swap-to-back来避免深度复制开销,如:
vector<vector<Object> > Objects;
for(/* some range */)
{
vector<Object> v;
for(/* some other range */)
{
v.push_back(/* some object */);
}
Objects.push_back(vector<Object>());
Objects.back().swap(v);
}
我如何使用std::move
移动v
到Objects
,以避免深度复制开销,而不是swap
?
我知道这里有很多变通方法,如多数组或直接插入Objects.back()
,但我需要一个std::move
使用的例子来理解它。
Objects.push_back( std::move( v ) );
vector<vector<Object> > Objects;
for(/* some range */)
{
vector<Object> v;
for(/* some other range */)
{
v.push_back(/* some object */);
}
Objects.push_back(std::move(v));
}
相关文章:
- 仅包含可移动 std::map 的类的移动构造函数不起作用
- 如何在窗口之间移动 std::unique_ptr 而不会冒内存泄漏的风险?
- 为什么移动 std::可选不重置状态
- C++:我可以重用/移动 std::list 元素从中间到结尾吗?
- 我应该移动 std::exchange ed 成员吗?
- 移动 std::bitset<N> 是否超过 N 个位置未定义的行为?
- 标准是否保证在移动std::p ackaged_task后安全使用std::future?
- 用于移动 std::shared_ptr 的函数声明
- 如何移动 std::ostringstream 的底层字符串对象?
- 移动std::shared_ptr会使程序崩溃
- c++11移动std::deque或std::list的插入
- 如何移动std::ostream
- 移动std::bind和std::thread中的语义/行为
- 为什么我不能移动 std::ofstream?
- 从char*中移动std::string的构造函数
- 移动 std::vector 成员的语义
- 移动std::unique_locks的std::矢量
- 复制/移动std::映射中键/值类型的要求
- 移动std::互斥锁的构造函数
- 在容器之间移动std::unique_ptr