std::copy和std::move的区别
时间: 2023-07-05 15:22:12 浏览: 259
actix-background-worker:样本问题代码
std::copy 和 std::move 都是 C++ STL 中的算法函数,它们的作用是不同的。
std::copy 用于将一个序列的元素复制到另一个序列中,它会复制元素的值,而不会改变原序列中的元素。它的函数签名如下:
```cpp
template <class InputIterator, class OutputIterator>
OutputIterator copy (InputIterator first, InputIterator last, OutputIterator result);
```
std::move 也用于将一个序列的元素复制到另一个序列中,但它会将元素的值“移动”到新序列中,而不是复制。这意味着,原序列中的元素可能会被修改或销毁。它的函数签名如下:
```cpp
template <class InputIterator, class OutputIterator>
OutputIterator move (InputIterator first, InputIterator last, OutputIterator result);
```
下面是一个使用 std::copy 和 std::move 的示例代码:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
int main() {
std::vector<int> v1 = {1, 2, 3, 4, 5};
std::vector<int> v2(5); // 存储复制结果的 vector
// 使用 std::copy 复制 v1 中的元素到 v2 中
std::copy(v1.begin(), v1.end(), v2.begin());
// 使用 std::move 将 v1 中的元素移动到 v3 中
std::vector<int> v3 = std::move(v1);
// 输出 v2 中的元素
for (int i : v2) {
std::cout << i << " ";
}
std::cout << std::endl;
// 输出 v3 中的元素
for (int i : v3) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
```
输出结果为:
```
1 2 3 4 5
1 2 3 4 5
```
在上面的代码中,我们使用 std::copy 函数将 v1 中的元素复制到 v2 中,并使用 std::move 将 v1 中的元素移动到 v3 中。可以看到,v2 中的元素与 v1 中的元素相同,而 v3 中的元素与 v1 中的元素不同。这是因为 std::move 函数将 v1 中的元素“移动”到了 v3 中,所以 v1 中的元素已经被修改或销毁。
阅读全文