最近在写一些有关AI的算法,需要的一些数据结构要用到复制的操作。因此在这里测试了一下各种数据的复制速度,编译器支持C++11/14。

#include <iostream>
#include <chrono>
#include <cstring>
#include <algorithm>
#include <array>
#include <vector>using std::chrono::high_resolution_clock;
using std::chrono::milliseconds;int main() {int Board[10][10] = {0}, tmp[10][10] = {0};std::array<std::array<int, 10>, 10>ABoard, Atmp;unsigned long long N = 10000000;// 复制数组high_resolution_clock::time_point beginTime = high_resolution_clock::now();for(unsigned long long i = 0; i < N; ++i) {std::copy(ABoard.begin(), ABoard.end(), Atmp.begin());}high_resolution_clock::time_point endTime = high_resolution_clock::now();milliseconds timeInterval = std::chrono::duration_cast<milliseconds>(endTime - beginTime);std::cout << "array=" << timeInterval.count() << "ms\n";// 复制vectorstd::vector<std::vector<int>>vec(10, std::vector<int>(10)), vec1(10, std::vector<int>(10));beginTime = high_resolution_clock::now();for(unsigned long long i = 0; i < N; ++i) {// vec.assign(vec1.begin(),vec1.end());  // 时间特别长,大约是array的20倍vec1 = vec;   // 与assign类似// vec.swap(vec1);  // 与Array类似}endTime = high_resolution_clock::now();timeInterval = std::chrono::duration_cast<milliseconds>(endTime - beginTime);std::cout << "vector=" << timeInterval.count() << "ms\n";// C语言方式的快速写入beginTime = high_resolution_clock::now();for(unsigned long long i = 0; i < N; ++i) {memcpy(Board, tmp, 10 * 10 * sizeof(int));}endTime = high_resolution_clock::now();timeInterval = std::chrono::duration_cast<milliseconds>(endTime - beginTime);std::cout << "memcpy=" << timeInterval.count() << "ms\n";
}
/*
未开优化:
array=466ms
vector=7923ms
memcpy=198ms
*/
/*
-O3优化,最高速度:
array=0ms
vector=453ms
memcpy=0ms
*/

因此,如果想要追求最快速度,那么尽量使用memcpy这个方式。即使增加到一亿个10*10的整型数组,速度1948ms也是很快的。

实际的计算中,一亿个局面的情况,耗费时间的可能不是复制操作了,应该是背后其它的一些计算,复制的时间开销可以不计。因此一般不必考虑复制浪费的时间。编译优化一旦开启,速度会更快。

关于拷贝常规数组、std::array和std::vector速度的一些测试相关推荐

  1. C++ STL源码剖析 tr1与std array

    C++ STL源码剖析 tr1与std array 深入底层,层层剖析by 光城 0.导语 源码剖析版本为gcc4.9.1. C++ tr1全称Technical Report 1,是针对C++标准库 ...

  2. 【C++】40. std::array与int a[]方式创建数组的区别

    C++11中std::array的使用 std::array<type,size> array1; std::array<int,3> array1和 int a[]={1,2 ...

  3. C 语言中std::array的神奇用法总结

    std::array是在C 11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此,使得std::array有很多与其他容器不同的特殊之处,比如:std::array的元素 ...

  4. C++语言中std::array的神奇用法总结,你需要知道!

    摘要:在这篇文章里,将从各个角度介绍下std::array的用法,希望能带来一些启发. td::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此, ...

  5. std::array

    array c++11 封装了相关的数组模板类,不同于 C 风格数组,它不会自动退化成 T* 类型,它能作为聚合类型聚合初始化 std::array 是封装固定大小数组的容器,数组元素下标索引从 0 ...

  6. javascript Array系列函数之9:slice拷贝一个数组

    1.slice没有参数,拷贝一个数组,跟原数组无关联 var arr1 = ['a', 'b', 'c']; var arr2 = arr1.slice(); console.log(arr2,arr ...

  7. NumPy — 创建全零、全1、空、arange 数组,array 对象类型,astype 转换数据类型,数组和标量以及数组之间的运算,NumPy 数组共享内存

    NumPy 简介 一个用 python 实现的科学计算包.包括: 1.一个强大的 N 维数组对象 Array : 2.比较成熟的(广播)函数库: 3.用于整合 C/C++ 和 Fortran 代码的工 ...

  8. 数组的选择--固定大小数组模板array存在的意义!

    主要就是为了使用的方便,更加容易和algorithm的算法结合的更好! #include <iostream> #include <ctime> #include <ar ...

  9. C ++ 数组 | 寻找最大、最小值,数组(Array)_1

    目录 寻找最大.最小值 数组 寻找最大.最小值 对于这个编程测验,我们将找到用户将输入的15个数字的最小值和最大值以及平均值. #include <iostream>int main() ...

最新文章

  1. 妙用QTP F1帮助功能
  2. Qt Creator使用版本控制系统
  3. 在打开的Web表单模态窗口中,避免点击服务端控件时弹出新窗口的技巧
  4. ASP.NET简易教程-页面布局
  5. java8 stream案例分析
  6. php 检查数据库查询结果,php数据库连接、查询、显示结果的小例子
  7. python内建函数举例
  8. create-react-app创建的项目npm run build之后静态文件找不到
  9. 读《大道至简》第2章有感
  10. wikioi 2315 longge的问题 2012年省队选拔赛山东(欧拉函数应用)
  11. minecraftjava版光追_我的世界:网易版终于更新狐狸生物?Java版光追技术已开始测试...
  12. centOS7中安装tecplot_ex_2015r2_linux64
  13. Exporting the operator hardsigmoid to ONNX opset version 11 is not supported
  14. Python中的三目表达式
  15. python 单位根检验代码_Python中ADF单位根检验实现查看结果的方法
  16. 让ros机器人行走、建图、路径规划、定位和导航
  17. 【mininet 0x02】如何使用mn工具来操作mininet
  18. [Unity] 状态机事件流程框架 (二) 设计游戏状态的保存框架,存档功能 ScriptableObject、EasySave
  19. mysql 取差值_MySQL计算相邻两行某列差值的方法
  20. vc++ C函数atoi和itoa的用法总结(转载)

热门文章

  1. 随机森林(独立思考的重要性)
  2. string的compare operator
  3. 《深度学习笔记》——深度神经网络的调试笔记
  4. NumPy中特别的数组函数 By Youki~
  5. 在线段裁剪算法中是否能对区域编码算法进行优化实现模式的唯一判别呢
  6. stm32驱动LTC6912程控放大器程序,PGA可编程增益放大器,可调增益运放电路
  7. leetcode955. Delete Columns to Make Sorted II
  8. 敏捷开发免费管理工具——火星人预览之六:我的空间,我的通知
  9. 嵌入式davinci电路元素基础和PWM模块
  10. linux-查找某目录下包含关键字内容的文件