std::move
STD:移动
Defined in header | | |
---|---|---|
template< class InputIt, class OutputIt > OutputIt move( InputIt first, InputIt last, OutputIt d_first | (1) | (since C++11) |
template< class ExecutionPolicy, class ForwardIt1, class ForwardIt2 > ForwardIt2 move( ExecutionPolicy&& policy, ForwardIt1 first, ForwardIt1 last, ForwardIt2 d_first | (2) | (since C++17) |
1%29移动范围内的元素[first, last)
,到另一个范围,从d_first
在此操作之后,Move-From范围中的元素仍将包含适当类型的有效值,但不一定包含与移动前相同的值。
2%29与%281%29相同,但根据policy。此重载只参与以下情况下的过载解决方案:std::is_execution_policy_v<std::decay_t<ExecutionPolicy>>是真的
参数
first, last | - | the range of elements to move |
---|---|---|
d_first | - | the beginning of the destination range. The behavior is undefined if d_first is within the range [first, last). In this case, std::move_backward may be used instead of std::move. |
policy | - | the execution policy to use. See execution policy for details. |
类型要求
-输入必须符合输入器的要求。
-输出必须符合输出器的要求。
-前进1,前进2必须符合先行者的要求。
返回值
输出迭代器到上一个元素之后的元素移动%28d_first + (last - first)
29%。
复杂性
一点儿没错last - first
转移任务。
例外
带有名为ExecutionPolicy
报告错误如下:
- 如果执行作为算法一部分调用的函数,则引发异常
ExecutionPolicy
是其中之一标准政策,,,std::terminate
叫做。对于任何其他人ExecutionPolicy
,行为是由实现定义的。
- 如果算法不能分配内存,
std::bad_alloc
被扔了。
可能的实施
模板<class InputIt,class OutputIt>OutputIt移动%28 InputIt First,InputIt Lest,OutputIt d[医]第一%29{而%281%21=最后%29{%2A丁[医]第一++=std::移动%28%2A第一++%29;}返回d[医]第一;}
*。
注记
当移动重叠范围时,std::move
当移动到左侧%28时,目标范围的开头位于源范围%29之外std::move_backward
当移动到目标区域的右%28端在源范围%29之外时,则是适当的。
例
下面的代码将线程对象%28从一个容器移动到另一个容器,线程对象本身是不可复制的%29。
二次
#include <iostream>
#include <vector>
#include <list>
#include <iterator>
#include <thread>
#include <chrono>
void f(int n)
{
std::this_thread::sleep_for(std::chrono::seconds(n)
std::cout << "thread " << n << " ended" << '\n';
}
int main()
{
std::vector<std::thread> v;
v.emplace_back(f, 1
v.emplace_back(f, 2
v.emplace_back(f, 3
std::list<std::thread> l;
// copy() would not compile, because std::thread is noncopyable
std::move(v.begin(), v.end(), std::back_inserter(l)
for (auto& t : l) t.join(
}
二次
产出:
二次
thread 1 ended
thread 2 ended
thread 3 ended
二次
另见
move_backward (C++11) | moves a range of elements to a new location in backwards order (function template) |
---|---|
move (C++11) | obtains an rvalue reference (function template) |
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。