C++中如何高效复制int指针指向的数组?技术问询
高效复制数组并返回指针的方法
哈哈,太懂你这种大数组逐元素复制的煎熬了!给你几个不用手动循环拷贝的高效办法:
用
std::memcpy直接内存拷贝
这是C标准库的函数,直接按字节复制整块内存,效率拉满,完全不用逐元素折腾。比如处理大小为N的数组:int* foo(int* a, int N) { int* b = new int[N]; // 先分配对应大小的内存 std::memcpy(b, a, sizeof(int) * N); // 一键完成整个数组的拷贝 // 对b执行各种增量操作 return b; }用C++的
std::copy算法
来自<algorithm>头文件,是类型安全的批量复制方式,编译器优化后效率和memcpy不相上下:#include <algorithm> int* foo(int* a, int N) { int* b = new int[N]; std::copy(a, a + N, b); // 从a的起始位置到a+N,批量复制到b // 操作b return b; }退一步:用
std::vector替代裸指针
虽然你要返回int*,但std::vector可以直接返回,还不用手动管理内存;要是非得拿指针,用vec.data()就能获取底层数组的指针,复制起来也超简单:#include <vector> std::vector<int> foo(int* a, int N) { std::vector<int> b(a, a + N); // 用迭代器直接构造完成复制 // 对b执行操作 return b; } // 要int*的话可以这么拿:auto ptr = foo(a, N).data();
对了,你说NOTE里的T间距特别奇怪?哈哈我刚扫了一眼,确实有点违和感,搞不好是排版时的小bug😂
内容的提问来源于stack exchange,提问作者J. Stutesman
相关产品推荐
相关产品推荐

