栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++之move提升copy性能

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++之move提升copy性能

  1.C++ 标准库vector::push_back 等这类函数时,会对参数的对象进行复制,连数据也会复制.这就会造成对象内存的额外创建, 本来原意是想把参数push_back进去就行了,通过std::move,可以避免不必要的拷贝操作。
  2.std::move是将对象的状态或者所有权从一个对象转移到另一个对象,只是转移,没有内存的搬迁或者内存拷贝所以可以提高利用效率,改善性能.。

3.原foo值被moved之后值被转移,所以为空字符串. 

#include      // std::cout
#include     // std::move (ranges)
#include       // std::move (objects)
#include        // std::vector
#include        // std::string

int main () {
  std::vector foo = {"air","water","fire","earth"};
  std::vector buf1 (foo.size());
	std::vector buf2 (foo.size());

  //1.copy foo data to buf1
	std::move (foo.begin(), foo.begin() + foo.size(), buf1.begin() );

	for(int i = 0; i < buf1.size(); i++){
		std::cout << "buf1 = " << buf1[i] << std::endl;
	}


  //2.copy foo data to buf2
  buf2 = std::move(foo);//通过std::move,可以避免不必要的拷贝操作,此时foo已经为空
	
	for(int i = 0; i < buf2.size(); i++){
		std::cout << "buf2 = " << buf2[i] << std::endl;
	}

  return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433611.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号