关于拷贝常规数组、std::array和std::vector速度的一些测试
最近在写一些有关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速度的一些测试相关推荐
- C++ STL源码剖析 tr1与std array
C++ STL源码剖析 tr1与std array 深入底层,层层剖析by 光城 0.导语 源码剖析版本为gcc4.9.1. C++ tr1全称Technical Report 1,是针对C++标准库 ...
- 【C++】40. std::array与int a[]方式创建数组的区别
C++11中std::array的使用 std::array<type,size> array1; std::array<int,3> array1和 int a[]={1,2 ...
- C 语言中std::array的神奇用法总结
std::array是在C 11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此,使得std::array有很多与其他容器不同的特殊之处,比如:std::array的元素 ...
- C++语言中std::array的神奇用法总结,你需要知道!
摘要:在这篇文章里,将从各个角度介绍下std::array的用法,希望能带来一些启发. td::array是在C++11标准中增加的STL容器,它的设计目的是提供与原生数组类似的功能与性能.也正因此, ...
- std::array
array c++11 封装了相关的数组模板类,不同于 C 风格数组,它不会自动退化成 T* 类型,它能作为聚合类型聚合初始化 std::array 是封装固定大小数组的容器,数组元素下标索引从 0 ...
- javascript Array系列函数之9:slice拷贝一个数组
1.slice没有参数,拷贝一个数组,跟原数组无关联 var arr1 = ['a', 'b', 'c']; var arr2 = arr1.slice(); console.log(arr2,arr ...
- NumPy — 创建全零、全1、空、arange 数组,array 对象类型,astype 转换数据类型,数组和标量以及数组之间的运算,NumPy 数组共享内存
NumPy 简介 一个用 python 实现的科学计算包.包括: 1.一个强大的 N 维数组对象 Array : 2.比较成熟的(广播)函数库: 3.用于整合 C/C++ 和 Fortran 代码的工 ...
- 数组的选择--固定大小数组模板array存在的意义!
主要就是为了使用的方便,更加容易和algorithm的算法结合的更好! #include <iostream> #include <ctime> #include <ar ...
- C ++ 数组 | 寻找最大、最小值,数组(Array)_1
目录 寻找最大.最小值 数组 寻找最大.最小值 对于这个编程测验,我们将找到用户将输入的15个数字的最小值和最大值以及平均值. #include <iostream>int main() ...
最新文章
- 妙用QTP F1帮助功能
- Qt Creator使用版本控制系统
- 在打开的Web表单模态窗口中,避免点击服务端控件时弹出新窗口的技巧
- ASP.NET简易教程-页面布局
- java8 stream案例分析
- php 检查数据库查询结果,php数据库连接、查询、显示结果的小例子
- python内建函数举例
- create-react-app创建的项目npm run build之后静态文件找不到
- 读《大道至简》第2章有感
- wikioi 2315 longge的问题 2012年省队选拔赛山东(欧拉函数应用)
- minecraftjava版光追_我的世界:网易版终于更新狐狸生物?Java版光追技术已开始测试...
- centOS7中安装tecplot_ex_2015r2_linux64
- Exporting the operator hardsigmoid to ONNX opset version 11 is not supported
- Python中的三目表达式
- python 单位根检验代码_Python中ADF单位根检验实现查看结果的方法
- 让ros机器人行走、建图、路径规划、定位和导航
- 【mininet 0x02】如何使用mn工具来操作mininet
- [Unity] 状态机事件流程框架 (二) 设计游戏状态的保存框架,存档功能 ScriptableObject、EasySave
- mysql 取差值_MySQL计算相邻两行某列差值的方法
- vc++ C函数atoi和itoa的用法总结(转载)