C++ 风格的复制操作

使用STL中的copy算法

int a[] = {1,2,3,4,5};

int b[5];

std::copy(std::begin(a),std::end(a),std::begin(b));

for(auto e:b) cout<

上述程序中,copy算法将数组a区间中的数复制到以begin(b)开始的区间中去.

使用array容器 (C++11)

std::array arr = {1,2,3,4,5};

std::array copy;

copy = arr; // 将arr中的元素复制到copy中

arr[0] = 100;

for(auto e:copy) cout<

C 风格的复制操作

使用memcpy()

int arr[] = {1,2,3,4,5};

int copy[5];

int len = sizeof(arr) / sizeof(arr[0]);

memcpy(copy,arr,len*sizeof(int)); // 输出 1,2,3,4,5

for(auto e:copy) cout<

注意:memcpy()函数的第三个参数表示的是要复制的字节数,而不是要复制的元素数目。至于这样做的原因,可以先来看memcpy()的原型: void* memcpy(void* destination,const void* source,size_t num);

由memcpy()的函数原型可以看到,该函数的前两个参数的类型是void*类型,这样做是为了使memcpy()可以作用于任何类型的指针。

但这样做又导致了一个问题,即memcpy()不知道传入数组的每个元素用多少字节来表示。也正是因为这个原因,使得memcpy()的第三个参数不能是要复制的元素个数,而是要复制的字节数。

使用memmove()

该函数与memcpy()类似,只是memmove允许目的位置和源位置重叠,示例如下:

int arr[] = {1,2,3,4,5,6,7,8};

memmove(arr+3,arr+1,sizeof(int)*5);

for(auto e:arr) cout<

注意:上面的程序中,如果将memmove()换作memcpy()可能也会正常工作,但是这种行为是不可预计的,当目的位置与源位置存在重叠时,应当使用memmove()。

测试实例

#include

using namespace std;

int main()

{

int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

int b[10] = { 0 };

int c[10] = { 0 };

//copy

copy(begin(a), end(a), begin(b));

for (auto i : b)

cout << i << " ";

cout << endl;

//memcpy

memcpy(c, a, sizeof(a));

for (auto i : c)

cout << i << " ";

cout << endl;

//memmove

int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8 };

memmove(arr + 3, arr + 1, sizeof(int)* 5);

for (auto e : arr)

cout << e << " ";

cout << endl;

system("pause");

return 0;

}

运行结果:

linux c 数组拷贝,C++对数组进行复制 - osc_8iux0cyz的个人空间 - OSCHINA - 中文开源技术交流社区...相关推荐

  1. linux内核等价多路径路由,高级路由 - 我是*李世民*的个人空间 - OSCHINA - 中文开源技术交流社区...

    策略路由背后的概念 Linux内核在默认情况下使用两张路由表:一张表用于本地路由,另一张可以由管理员来配置.如果内核编译支持策略路由,那么可以有多大255张不同的.相互独立的路由表.策略路由背后的主要 ...

  2. linux使用wdm设备驱动模型,驱动开发(WDM) - thomas_more的个人空间 - OSCHINA - 中文开源技术交流社区...

    windows 设备对象名称(内核对象必须命名才能被用户层访问产生句柄) \Driver\ 内核模式下访问 \.\ 用户模式下访问 winObj(symbollink设备名称的别名,各个节点查看)和d ...

  3. linux lcd驱动调试 echo dev/fb0,LCD驱动程序 - osc_msmij2gf的个人空间 - OSCHINA - 中文开源技术交流社区...

    LCD驱动程序 假设 app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0 kernel: fb_open int fbidx = iminor ...

  4. a33 linux内核启动网卡,a33核心板启动问题 - nevermore1981的个人空间 - OSCHINA - 中文开源技术交流社区...

    测试发现a33核心板有时无法正常启动,通过串口信息显示判断是uboot 对mmc初始化有时会出现问题: [      0.770][mmc]: ************Try MMC card 2** ...

  5. linux 劫持广告技术,屏蔽运营商广告劫持 - gcudwork的个人空间 - OSCHINA - 中文开源技术交流社区...

    在今天早上我查找知乎时再次遇到了恶心的运营商广告劫持,右下角硕大的广告直接让知乎挂掉了,我刷了五次知乎才好,之前休息的时候逛知乎也是多次加载错误,估计也是这劫持的锅,相信各位也遇到过不少的运营商劫持插 ...

  6. linux卸载apk命令,apk的安装和卸载 - Jenly的个人空间 - OSCHINA - 中文开源技术交流社区...

    之前写了一篇关于静默安装apk的.那个其实是在获取root权限的条件下来通过执行命令完成的.其功能本身已经很强大了.只是前提条件是需要root权限.然后什么静默安装卸载就都是浮云了.对于以下刚刚学an ...

  7. java 数组减除值_java数组操作 - osc_hwpd2zko的个人空间 - OSCHINA - 中文开源技术交流社区...

    什么是数组: 程序 = 算法+数据结构 算法:解决问题的步骤,流程(顺序,分支,循环) 数据结构:将数据按照某种特定的结构来保存 数怎么存 设计良好的,合理的数据结构可以导致好的算法 数组:就是一种最 ...

  8. python数组和链表的区别_数组和链表的区别 - toddler的个人空间 - OSCHINA - 中文开源技术交流社区...

    数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素.但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中.同 ...

  9. java数组输出是地址_java数组输出 - SuperPcf的个人空间 - OSCHINA - 中文开源技术交流社区...

    java数组输出 输出一个数组中的元素,我们通常用for循环来做,比如: [java] view plaincopy在CODE上查看代码片派生到我的代码片 package test; public c ...

最新文章

  1. php,cgi,nginx关系
  2. php框架打印session,Session组件
  3. 5.3.2 TCP连接管理
  4. oracle database 9i/10g/11g 编程艺术 源代码下载
  5. 在js对象上绑定js数组原生方法
  6. 如何将业务系统的数据抽取汇聚到数据中台?
  7. Good Technology 产品特色
  8. 天天动听 半透明Menu效果
  9. Kubernetes 开发流程中的三个关键步骤
  10. ELK详解(十三)——Logstash收集Nginx日志实战
  11. 2021“数维杯”国际大学生数学建模竞赛A题思路
  12. I2S/PCM协议及TDM模式详解
  13. java使用poi导出excel 包括多个工作簿
  14. 清华校友、香港科技大学准博士ICCV顶会论文被爆公然抄袭!去年CVPR也是抄的...
  15. 我国会计计算机的发展历程,会计的发展历程是什么
  16. 如何实现select * exclude column
  17. 天猫店群比淘宝店群好做吗?同是无货源差距为何那么大,个人分享
  18. 迈卡名车茂品牌LOGO全新升级
  19. PTA ## 统计字符
  20. python 统计文件夹下的文件夹/某类型文件的数目

热门文章

  1. dev控件ASPxComboBox设置ReadOnly=true后
  2. 40. Combination Sum II
  3. 【转载】动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)...
  4. JSP servlet的配置与使用
  5. 用Python制作五子棋人机对弈(人工智障版和升级AI版)
  6. 错误C2398:从“double”转换为“float”需要缩小转换
  7. ffmpeg屏幕推流
  8. glibc之pthread_mutex_t/pthread_cond_t实现原理(十七)
  9. WSL自定义安装路径
  10. Android Binder Debug