首页 > 其他分享 >vector<int>::push_back 与直接访问性能对比

vector<int>::push_back 与直接访问性能对比

时间:2024-11-15 22:07:52浏览次数:1  
标签:int back bench state vector vec push ns

vector 是提前开好空间然后每次 clear,vector2 是 reserve,list 就是 list,array 是对 vector vec[cur++] = i;。这里都是整数,push_back 与 emplace_back 整体没有什么区别,但有人要看,所以函数名前面加了 e 的是 emplace_back。

测试结果:array < vector = vector2 << list

2024-11-15T22:10:51+08:00
Running ./push_back
Run on (8 X 2419.2 MHz CPU s)
CPU Caches:
  L1 Data 48 KiB (x4)
  L1 Instruction 32 KiB (x4)
  L2 Unified 1280 KiB (x4)
  L3 Unified 8192 KiB (x1)
Load Average: 0.08, 0.02, 0.01
-----------------------------------------------------------------
Benchmark                       Time             CPU   Iterations
-----------------------------------------------------------------
bench_evector/100            59.5 ns         59.5 ns     12706596
bench_evector/1000            538 ns          538 ns      1260305
bench_evector/10000          5438 ns         5438 ns       131222
bench_evector/100000        82071 ns        82071 ns         8507
bench_evector/1000000      868177 ns       868180 ns          817
bench_evector2/100           73.6 ns         73.6 ns      9367293
bench_evector2/1000           536 ns          536 ns      1290501
bench_evector2/10000         5057 ns         5057 ns       137541
bench_evector2/100000       81939 ns        81939 ns         8573
bench_evector2/1000000     860870 ns       860872 ns          816
bench_elist/100              1240 ns         1240 ns       558806
bench_elist/1000            12513 ns        12513 ns        53484
bench_elist/10000          126142 ns       126143 ns         5498
bench_elist/100000        1302104 ns      1302107 ns          537
bench_elist/1000000      14266316 ns     14266308 ns           48
bench_vector/100             55.7 ns         55.7 ns     12734427
bench_vector/1000             536 ns          536 ns      1282267
bench_vector/10000           5360 ns         5360 ns       129287
bench_vector/100000         81479 ns        81479 ns         8613
bench_vector/1000000       878694 ns       878296 ns          806
bench_vector2/100            74.0 ns         74.0 ns      9416006
bench_vector2/1000            542 ns          542 ns      1286119
bench_vector2/10000          5053 ns         5053 ns       134027
bench_vector2/100000        81568 ns        81567 ns         8460
bench_vector2/1000000      852110 ns       852105 ns          803
bench_list/100               1291 ns         1291 ns       552344
bench_list/1000             12544 ns        12544 ns        56783
bench_list/10000           128511 ns       128511 ns         5560
bench_list/100000         1300553 ns      1300559 ns          549
bench_list/1000000       14576666 ns     14576566 ns           47
bench_array/100              35.2 ns         35.2 ns     19917275
bench_array/1000              300 ns          300 ns      2356720
bench_array/10000            2961 ns         2961 ns       237905
bench_array/100000          29223 ns        29198 ns        25397
bench_array/1000000        324843 ns       324845 ns         2077

测试代码:

#include <benchmark/benchmark.h>
#include <bits/stdc++.h>
using namespace std;
void bench_evector2(benchmark::State& state) {
  int n = state.range(0);
  for (auto _: state) {
    vector<int> vec;
    vec.reserve(n);
    for (int i = 0; i < n; i++) vec.emplace_back(i);
  }
}
void bench_elist(benchmark::State& state) {
  int n = state.range(0);
  for (auto _: state) {
    list<int> vec;
    for (int i = 0; i < n; i++) vec.emplace_back(i);
  }
}
void bench_evector(benchmark::State& state) {
  int n = state.range(0);
  vector<int> vec(n);
  for (auto _: state) {
    vec.clear();
    for (int i = 0; i < n; i++) vec.emplace_back(i);
  }
}
void bench_vector2(benchmark::State& state) {
  int n = state.range(0);
  for (auto _: state) {
    vector<int> vec;
    vec.reserve(n);
    for (int i = 0; i < n; i++) vec.push_back(i);
  }
}
void bench_list(benchmark::State& state) {
  int n = state.range(0);
  for (auto _: state) {
    list<int> vec;
    for (int i = 0; i < n; i++) vec.push_back(i);
  }
}
void bench_vector(benchmark::State& state) {
  int n = state.range(0);
  vector<int> vec(n);
  for (auto _: state) {
    vec.clear();
    for (int i = 0; i < n; i++) vec.push_back(i);
  }
}
void bench_array(benchmark::State& state) {
  int n = state.range(0);
  vector<int> vec(n);
  for (auto _: state) {
    int cur = 0;
    for (int i = 0; i < n; i++) vec[cur++] = i;
  }
}
#define generate_test(name) BENCHMARK(bench_##name)->RangeMultiplier(10)->Range(100, 1000000);
generate_test(evector);
generate_test(evector2);
generate_test(elist);
generate_test(vector);
generate_test(vector2);
generate_test(list);
generate_test(array);
BENCHMARK_MAIN();

标签:int,back,bench,state,vector,vec,push,ns
From: https://www.cnblogs.com/caijianhong/p/18548753

相关文章

  • SELF-REFINE: Iterative Refinement with Self-Feedback
    1.概述基于给定的Prompt,大语言模型生成的Reponse可能不是最好的(这一点我认为当前的LLM大部分都是Decoder架构,基于已生成的结果产生下一个Token,一旦之前生成结果出错,也不容易及时改正。)。本文为原始的生成添加了额外的反思重写步骤,过程如下:对于给定的\(Input\),先交给LLM生成......
  • useCallback 和 useMemo 使用场景
     一切为了性能,无论是useCallback还是useMemo还是memo,都是为了让不该渲染的组件不去渲染在学习useCallback、useMemo之前,我们需要知道一点,React的渲染是自顶而下,如果父组件渲染了,那么子组件也会渲染,其子孙组件“世世代代”都要渲染但如果父组件的渲染与子组件的pr......
  • Unable to load io.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider,
     macm1启动项目,报错,“Unabletoloadio.netty.resolver.dns.macos.MacOSDnsServerAddressStreamProvider,fallbacktosystemdefaults.ThismayresultinincorrectDNSresolutionsonMacOS.”,出现这个问题是因为使用了spring-cloud-starter-gateway依赖,这需要额外安装......
  • docker-compose安装pgsql和pgvector
    快速安装PostgreSQL和pgvector1、创建Dockerfile文件,代码如下:#使用PostgreSQL16基础镜像FROMpostgres:16#安装pgvectorRUNapt-getupdate&&\apt-getinstall-ypostgresql-16-pgvector&&\rm-rf/var/lib/apt/lists/*#设置启动命令CMD["postgr......
  • C++学习笔记之string容器、vector容器
    我们读过的书,说过的话,见过的山水,见到的人和事,最终都会变成我们脚下的的路。1.string容器string是C++风格的字符串,而string本质上是一个类。#include<iostream>usingnamespacestd;#include<string>//以下参数为constchar*类型与string类型的函数参数可以......
  • .NET 8 强大功能 IHostedService 与 BackgroundService 实战
    前言在.NET8中,IHostedService和BackgroundService两个核心接口的引入,增强了项目开发中处理定时任务的能力。这两个接口不仅简化了定时任务、后台处理作业以及定期维护任务的实现过程,还提升了在ASP.NETCore或任何基于.NET的宿主应用程序中的集成与管理效率。IHostedService......
  • Langchain and Azure cognitive search - ImportError - cannot import name ‘Vector
    题意:LangchainandAzurecognitivesearch-ImportError-cannotimportname'Vector'from'azure.search.documents.models'“Langchain和Azure认知搜索-导入错误:无法从'azure.search.documents.models'导入名称'Vector'”问题背景:Iam......
  • oracle数据库的begin backup状态
    Oracle数据库的BEGINBACKUP状态是数据库热备份过程中的一个重要阶段。以下是对Oracle数据库BEGINBACKUP状态的详细解释:一、BEGINBACKUP状态的作用在Oracle数据库中,BEGINBACKUP状态主要用于启动热备份模式。此状态下,数据库允许用户在进行备份的同时,仍然可以对数据库进行正......
  • c++(vector、map、list、deque、set)总结-面试
    目录1.vector2.deque3.list4.map5.set6.queue7.stack8.STL容器使用时机希望在面试和学习过程中可以帮助大家梳理重点C++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实现,list表示非连续......
  • 【c++】vector
    序列式容器vectorstd::vector 是STL提供的 内存连续的、可变长度 的数组(亦称列表)数据结构。能够提供线性复杂度的插入和删除,以及常数复杂度的随机访问。为什么要使用 vector作为OIer,对程序效率的追求远比对工程级别的稳定性要高得多,而 vector 由于其对内存的动态......