赞
踩
前言:最近在读项目源码,发现有些地方用std::copy,有些地方用memcpy。但是并不知道为什么要这样,但是原作者也不认识,就只好自己研究一下了。
相同:
不同:
从两者的不同点就可以看的出来,大致使用场景的区别了。
适合std::copy:
适合memcpy:
总结以下,C++才加入的类型或者自行定义的类型、涉及深拷贝、源和目标内存区域有重叠的时候适合std::copy,其它时候用memcpy好点。
补充:平凡类型trivial和非平凡类型non-trivial。
这个主要是针对类中的四个函数来说的:构造函数、复制构造函数、赋值函数以及析构函数。
如果满足以下三点任意一点,就是非平凡类型non-trivial:
把src里面的内容复制到dst。
vector<int>src= { 0, 1, 2, 3, 4 };
vector<int>dst(5, 0);
std::copy(src.begin(), src.end(),dst.begin());// src起始地址,src末尾下一个,dst起始地址
因为memcpy是C那边的,所以用vector不太合适,适合简单的数据类型。
const char src[50] = "http://www.runoob.com";
char dst[50];
// strlen(src)不包括结束符
memcpy(dst, src, strlen(src)+1);// dst起始地址,src起始地址,复制长度
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。