c++ - C++ 入门 5 版。移动迭代器
问题描述
我正在阅读 C++ Primer 5 ed。我正在仔细阅读它,因为它真的很有用。我也练习了太多我从中学到的东西。现在我在第 13 章。移动语义。移动迭代器。在我到达这一段之前,一切都很清楚:
值得注意的是,标准库不保证哪些算法可以与移动迭代器一起使用,哪些不能。因为移动对象可以消除源,所以只有当您确信算法在分配给该元素或将该元素传递给用户定义的函数后不会访问该元素时,才应该将移动迭代器传递给算法。
有人可以向我解释这一段吗?我不明白“只有当您确信算法在分配给该元素或将该元素传递给用户定义的函数后不会访问该元素时,您才应该将移动迭代器传递给算法。”??他说的是哪个元素?感谢你们!
例如:
std::vector<int> vi{5, 7, 10, 24}, vi2;
std::copy(std::make_move_iterator(std::begin(vi)), std::make_move_iterator(std::end(vi)), std::back_inserter(vi2));
std::copy(vi2.cbegin(), vi2.cend(), std::ostream_iterator<int>(std::cout, ", "));
这是否意味着copy
不应该访问 的元素vi
?
解决方案
推荐阅读
- node.js - 以下服务未运行:web. - EB AWS 部署错误
- datatable - DataTable 显示错误的数字列排序
- cplex - 如何在 IBM ILOG CPLEX Optimization Studio 中提取不同的问题解决方案
- php - Yii2:前端用户注销但后端保持登录状态
- reactjs - × TypeError:无法读取未定义的属性“0” - REACT.JS
- c# - 关闭 SqlConnection 时如何重用按钮在数据库中查找现有值(更多详细信息在帖子中)
- python - 来自文件夹嵌套 Zip 文件的 pandas read_csv 的 UnicodeDecodeError ('utf-8')
- c - 如果 char *ptr[10]={"ram","try"} 那么 ptr ,*ptr , *ptr[0] , ptr[0] 如果所有给定的四种类型都用于 printf 函数有什么区别?
- ios - 快速显示小时和分钟的最佳方法是什么?
- python - 无法在 M1 Mac 上使用 Miniforge Conda 环境在 Jupyter Notebook 中导入已安装的包