linux c 数组拷贝,C++对数组进行复制 - osc_8iux0cyz的个人空间 - OSCHINA - 中文开源技术交流社区...
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 - 中文开源技术交流社区...相关推荐
- linux内核等价多路径路由,高级路由 - 我是*李世民*的个人空间 - OSCHINA - 中文开源技术交流社区...
策略路由背后的概念 Linux内核在默认情况下使用两张路由表:一张表用于本地路由,另一张可以由管理员来配置.如果内核编译支持策略路由,那么可以有多大255张不同的.相互独立的路由表.策略路由背后的主要 ...
- linux使用wdm设备驱动模型,驱动开发(WDM) - thomas_more的个人空间 - OSCHINA - 中文开源技术交流社区...
windows 设备对象名称(内核对象必须命名才能被用户层访问产生句柄) \Driver\ 内核模式下访问 \.\ 用户模式下访问 winObj(symbollink设备名称的别名,各个节点查看)和d ...
- linux lcd驱动调试 echo dev/fb0,LCD驱动程序 - osc_msmij2gf的个人空间 - OSCHINA - 中文开源技术交流社区...
LCD驱动程序 假设 app: open("/dev/fb0", ...) 主设备号: 29, 次设备号: 0 kernel: fb_open int fbidx = iminor ...
- a33 linux内核启动网卡,a33核心板启动问题 - nevermore1981的个人空间 - OSCHINA - 中文开源技术交流社区...
测试发现a33核心板有时无法正常启动,通过串口信息显示判断是uboot 对mmc初始化有时会出现问题: [ 0.770][mmc]: ************Try MMC card 2** ...
- linux 劫持广告技术,屏蔽运营商广告劫持 - gcudwork的个人空间 - OSCHINA - 中文开源技术交流社区...
在今天早上我查找知乎时再次遇到了恶心的运营商广告劫持,右下角硕大的广告直接让知乎挂掉了,我刷了五次知乎才好,之前休息的时候逛知乎也是多次加载错误,估计也是这劫持的锅,相信各位也遇到过不少的运营商劫持插 ...
- linux卸载apk命令,apk的安装和卸载 - Jenly的个人空间 - OSCHINA - 中文开源技术交流社区...
之前写了一篇关于静默安装apk的.那个其实是在获取root权限的条件下来通过执行命令完成的.其功能本身已经很强大了.只是前提条件是需要root权限.然后什么静默安装卸载就都是浮云了.对于以下刚刚学an ...
- java 数组减除值_java数组操作 - osc_hwpd2zko的个人空间 - OSCHINA - 中文开源技术交流社区...
什么是数组: 程序 = 算法+数据结构 算法:解决问题的步骤,流程(顺序,分支,循环) 数据结构:将数据按照某种特定的结构来保存 数怎么存 设计良好的,合理的数据结构可以导致好的算法 数组:就是一种最 ...
- python数组和链表的区别_数组和链表的区别 - toddler的个人空间 - OSCHINA - 中文开源技术交流社区...
数组是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素.但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加的元素放在其中.同 ...
- java数组输出是地址_java数组输出 - SuperPcf的个人空间 - OSCHINA - 中文开源技术交流社区...
java数组输出 输出一个数组中的元素,我们通常用for循环来做,比如: [java] view plaincopy在CODE上查看代码片派生到我的代码片 package test; public c ...
最新文章
- php,cgi,nginx关系
- php框架打印session,Session组件
- 5.3.2 TCP连接管理
- oracle database 9i/10g/11g 编程艺术 源代码下载
- 在js对象上绑定js数组原生方法
- 如何将业务系统的数据抽取汇聚到数据中台?
- Good Technology 产品特色
- 天天动听 半透明Menu效果
- Kubernetes 开发流程中的三个关键步骤
- ELK详解(十三)——Logstash收集Nginx日志实战
- 2021“数维杯”国际大学生数学建模竞赛A题思路
- I2S/PCM协议及TDM模式详解
- java使用poi导出excel 包括多个工作簿
- 清华校友、香港科技大学准博士ICCV顶会论文被爆公然抄袭!去年CVPR也是抄的...
- 我国会计计算机的发展历程,会计的发展历程是什么
- 如何实现select * exclude column
- 天猫店群比淘宝店群好做吗?同是无货源差距为何那么大,个人分享
- 迈卡名车茂品牌LOGO全新升级
- PTA ## 统计字符
- python 统计文件夹下的文件夹/某类型文件的数目
热门文章
- dev控件ASPxComboBox设置ReadOnly=true后
- 40. Combination Sum II
- 【转载】动态载入DLL所需要的三个函数详解(LoadLibrary,GetProcAddress,FreeLibrary)...
- JSP servlet的配置与使用
- 用Python制作五子棋人机对弈(人工智障版和升级AI版)
- 错误C2398:从“double”转换为“float”需要缩小转换
- ffmpeg屏幕推流
- glibc之pthread_mutex_t/pthread_cond_t实现原理(十七)
- WSL自定义安装路径
- Android Binder Debug