【c++】遍历容器,哪一种方法速度最快?

news2024/11/15 21:43:00

终于有一个简单的每日一题!写完的时候甚至代码还没有编译结束!刚好借今天的每日一题探究一下一直以来的一些疑惑:容器的遍历。
题目大概是这样的:
好耶!
我们一眼就看到了容器的遍历!!那么众所周知,容器的遍历最常用的有三种:

  1. 基础for,也就是for(int i = 0; i < 10; i++)这种格式
  2. c++11 的for
  3. algorithm中的for_each

下面蘸着这个题写三种遍历,看看执行时间:

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <time.h>
#include <iomanip>

using namespace std;

int countSeniors(vector<string> &details)
{
  int cnt = 0;
  for_each(details.begin(), details.end(), [&cnt](const string &detail)
           {
            if (detail[11] > '6' || (detail[11] == '6' && detail[12] != '0')) {
                cnt++;
            } });

  return cnt;
}

int countSeniors2(vector<string> &details)
{
  int cnt = 0;
  for (const auto &detail : details)
  {
    if (detail[11] > '6' || (detail[11] == '6' && detail[12] != '0'))
    {
      cnt++;
    }
  }
  return cnt;
}

int countSeniors3(vector<string> &details)
{
  int cnt = 0;
  for (int i = 0; i < static_cast<int>(details.size()); i++)
  {
    if (details[i][11] > '6' || (details[i][11] == '6' && details[i][12] != '0'))
    {
      cnt++;
    }
  }
  return cnt;
}

int main()
{
  vector<string> details = {"7868190130M7522", "5303914400F9211", "9273338290F4010"};
  cout << setprecision(10);
  {
    clock_t startT, finishT;
    startT = clock();
    countSeniors(details);
    finishT = clock();
    double duration = static_cast<double>(finishT - startT) / CLOCKS_PER_SEC;
    cout << "匿名函数: " << duration << endl;
  }
  {
    clock_t startT, finishT;
    startT = clock();
    countSeniors2(details);
    finishT = clock();
    double duration = static_cast<double>(finishT - startT) / CLOCKS_PER_SEC;
    cout << "c++11 for: " << duration << endl;
  }
  {
    clock_t startT, finishT;
    startT = clock();
    countSeniors3(details);
    finishT = clock();
    double duration = static_cast<double>(finishT - startT) / CLOCKS_PER_SEC;
    cout << "基础for: " << duration << endl;
  }
  {
    clock_t startT, finishT;
    startT = clock();
    for (int i = 0; i < 100; i++)
    {
      countSeniors(details);
    }
    finishT = clock();
    double duration = static_cast<double>(finishT - startT) / CLOCKS_PER_SEC;
    cout << "100 次:匿名函数: " << duration << endl;
  }
  {
    clock_t startT, finishT;
    startT = clock();
    for (int i = 0; i < 100; i++)
    {
      countSeniors2(details);
    }
    finishT = clock();
    double duration = static_cast<double>(finishT - startT) / CLOCKS_PER_SEC;
    cout << "100 次:c++11 for: " << duration << endl;
  }
  {
    clock_t startT, finishT;
    startT = clock();
    for (int i = 0; i < 100; i++)
    {
      countSeniors3(details);
    }
    finishT = clock();
    double duration = static_cast<double>(finishT - startT) / CLOCKS_PER_SEC;
    cout << "100 次:基础for: " << duration << endl;
  }
  return 0;
}

运行一遍,得到了这样的输出:
在这里插入图片描述
Amazing!可以看到这场比赛,匿名函数输得一塌糊涂,反而是朴实无华的for夺魁!
这到底是为什么呢?

–没写完,代码跑完了,一会儿干完活再写

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1125901.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

管理类联考——英语二——阅读篇——题材:经济

文章目录 2011 年&#xff0c;Text 2——题材&#xff1a;经济句意理解题-原词复现一般不选&#xff0c;但是要留意无中生有推断题-原词复现&#xff0c;注意是否“无中生有”“对象错误”“词意相反”推断题推断题主旨题-不了解阅读意思&#xff0c;很难做出选择 2011 年&…

R-CNN(CVPR2014)

文章目录 AbstractIntroductionObject detection with R-CNNModule designTest-time detection Visualization, ablation, and modes of errorSemantic segmentationConclusion 论文链接 源代码 Abstract 在经典PASCAL VOC数据集上测量的对象检测性能在过去几年中趋于稳定&…

MTK6737安卓核心板-MT6737核心板_4G安卓模块

MT6737核心板以竞争力的价格提供出色的性能和功耗效率&#xff0c;降低了BOM、GMO和内存成本&#xff0c;符合以价值为导向的市场需求。该核心板是一种先进的解决方案&#xff0c;为终端用户提供了高品质又经济实惠的体验。它与全球范围内的IMS兼容&#xff0c;支持VoLTE、ViLT…

【C++那些事儿】函数重载与C++中的“指针“——引用

君兮_的个人主页 即使走的再远&#xff0c;也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们&#xff0c;这里是君兮_&#xff0c;我之前看过一套书叫做《明朝那些事儿》&#xff0c;把本来枯燥的历史讲的生动有趣。而C作为一门接近底层的语言&#xff0c;无疑是抽象且难度颇…

SparkSQL之LogicalPlan概述

逻辑计划阶段在整个流程中起着承前启后的作用。在此阶段&#xff0c;字符串形态的SQL语句转换为树结构形态的逻辑算子树&#xff0c;SQL中所包含的各种处理逻辑&#xff08;过滤、剪裁等&#xff09;和数据信息都会被整合在逻辑算子树的不同节点中。逻辑计划本质上是一种中间过…

面试时一些不能说的离职原因

“你为什么从上一家公司离职&#xff1f;”这个问题在面试时基本都会被问到&#xff0c;这是无法避免的问题。那么什么样的理由才能做到既反映实际情况&#xff0c;又能得到HR认可呢&#xff1f;以下的几种回答千万不能脱口而出。 1、毫无顾忌地说前公司的坏话 1&#xff09;…

进阶JAVA篇- Map 系列集合的遍历方法与常用API

目录 1.0 Map 集合的说明 1.1 Map 集合的常用方法 1.2 Map 系列集合的特点 2.0 Map 系列集合的遍历方法&#xff08;三种方法&#xff09; 2.1 使用 keySet() 方法遍历 2.2 使用 entrySet() 方法遍历 2.3 使用 forEach() 方法遍历&#xff08;Java 8&#xff09; 1.0 Map 集合的…

数据结构与算法——选择排序法

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;正逐渐往全干发展 &#x1f4c3;个人状态&#xff1a; 研发工程师&#xff0c;现效力于中国工业软件事业 &#x1f680;人生格言&#xff1a; 积跬步…

镇魂街武神躯手游攻略,镇魂街武神躯神魂搭配

武神躯是《镇魂街》手游中令人敬畏的角色之一&#xff0c;技能的合理搭配至关重要。下面将详细介绍镇魂街武神躯手游攻略如何搭配武神躯的技能以取得最佳战斗效果&#xff1a; 关注【娱乐天梯】&#xff0c;获取内部福利号 1. 主动技能-刺客之心&#xff1a;这是武神躯的核心主…

python 桌面软件开发-matplotlib画图鼠标缩放拖动

继上一篇在 Java 中缩放拖动图片后&#xff0c;在python matplotlib中也来实现一个自由缩放拖动的例子&#xff1a; python matplotlib 中缩放&#xff0c;较为简单&#xff0c;只需要通过设置要显示的 x y坐标的显示范围即可。基于此&#xff0c;实现一个鼠标监听回调&#xf…

python安装的第三方库

安装第三方库的方式 先按“winR”并输入 cmd 打开命令运行窗口 输入命令&#xff1a; pip install 包名&#xff0c;比如要安装gym包就输入pip install gym 可能存在报错问题及解决办法 报错Could not fetch URL https://pypi.tuna.tsinghua.edu.cn/simple/pip/: There was …

基于Java的美食推荐管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

SparkSQL的Shuffle分区设定及异常数据处理API(去重、缺失值处理)

一、Spark SQL的Shuffle分区数目设定 在允许spark程序时&#xff0c;查看WEB UI监控页面发现&#xff0c;某个Stage中有200个Task任务&#xff0c;也就是说RDD有200分区Partion。 产生原因&#xff1a; 在Spark SQL中&#xff0c;当Job中产生Shuffle时&#xff0c;默认的分区数…

Android乐器在线租借租赁系统+全套手把手视频教程

【项目功能介绍】 功能列表: 本系统包含后台管理和前端app双端系统, 本系统包含三个角色: 管理员,员工,app用户。 后台管理员的功能包含: 登录, 退出, 乐器管理,添加乐器,修改乐器,禁用启用乐器; 乐器器械管理,添加乐器器械,修改乐器器械,启用禁用乐器器械; 订单管理,确定订单…

Node学习笔记之fs模块

fs 全称为 file system &#xff0c;称之为 文件系统 &#xff0c;是 Node.js 中的 内置模块 &#xff0c;可以对计算机中的磁盘进行操 作。 本章节会介绍如下几个操作&#xff1a; 文件写入文件读取文件移动与重命名文件删除文件夹操作查看资源状态 一、文件写入 文件写入就…

Vercel,建站者的福音!!!

前言 各位互联网精神股东大家好&#xff01; 在今年八九月份之前&#xff0c;我所搭建的杂七杂八的个人、团队应用&#xff0c;包括但不限于文档站&#xff0c;博客站&#xff0c;Api服务&#xff0c;线上项目等&#xff0c;他们背后的服务支持可以归纳为以下几种&#xff1a…

Arduion 驱动 ADXL335三轴加速度计模块

Arduion 驱动 ADXL335三轴加速度计模块 简介电气参数原理图接线代码实验结果 简介 ADXL335是一个小&#xff0c;薄&#xff0c;低功率&#xff0c;完整的三轴加速度计&#xff0c;具有信号调节电压输出。该产品测量加速度的最小全尺度范围为3 g。它可以测量倾斜传感应用中重力…

【微信小程序开发】之微信授权登陆

目录 前言 ​编辑一、微信授权登陆介绍 1. 基本概念 2. 微信小程序开发实现微信授权登陆原理流程 3. 小程序中运用微信授权登陆的好处 二、微信授权登陆接口演示 1. 在微信开发工具中导入小程序授权微信登陆前端项目 2. 微信授权登陆的方式 2.1 wx.login 2.2 wx.getUse…

提高查询性能的秘密:深入剖析聚集、辅助、覆盖和联合索引

文章目录 &#x1f34a; 聚集索引&#x1f34a; 辅助索引&#x1f34a; 覆盖索引&#x1f389; 覆盖索引是什么&#xff1f;&#x1f389; 什么情况下优化器会选择使用覆盖索引&#xff1f;&#x1f4dd; 1. 查询操作只需要用到辅助索引中的字段&#x1f4dd; 2. 进行统计操作时…

使用Java实现汉诺塔问题~

我们设A为起始柱子&#xff0c;B为辅助柱子&#xff0c;C为目标柱子 由于盘子只能是大的放在下面&#xff0c;小的放在上面&#xff0c;因此&#xff0c;我们需要先将A柱子除了最下层的盘子都移动至B柱子 如下所示完成了最下层柱子到达它的最终位置&#xff0c;接下来&#xf…