C++ std::vector 三种遍历方式的效率比较

#include <iostream>
#include <vector>
#include <stdint.h>
#include <ctime>

int main()
{
    const uint32_t loop = 1000000;
    std::vector<int32_t> vec;
    clock_t timeStart = 0;
    for (uint32_t i = 0; i < loop; ++i)
    {
        vec.push_back(i);
    }
    // test time use
    // 1.by index
    timeStart = clock();
    for (uint32_t i = 0; i < vec.size(); ++i)
    {
        vec[i];
    }
    std::cout << clock() - timeStart << "ms" << std::endl;
    // 2.by iterator
    timeStart = clock();
    for (std::vector<int32_t>::const_iterator it = vec.begin(); it != vec.end(); ++it)
    {
        *it;
    }
    std::cout << clock() - timeStart << "ms" << std::endl;
    // 3.by auto iterator
    timeStart = clock();
    for (auto it = vec.begin(); it != vec.end(); ++it)
    {
        *it;
    }
    std::cout << clock() - timeStart << "ms" << std::endl;
    getchar();
    return 0;
}

代码很简单,构建一个包含若干个整数的vector,分别按照三种方式遍历,统计消耗时间,结果如下:

可以发现,按照传统下标方式遍历的效率快的不是一星半点,虽然这种方式容易发成写错下标而造成越界的情况,但是在代码提效的时候,是一个不可忽视的点.

时间: 2024-08-06 16:05:46

C++ std::vector 三种遍历方式的效率比较的相关文章

二叉树的三种遍历方式的循环和递归的实现方式

///////////////////头文件:BST.h//////////////////////// #ifndef BST_H #define BST_H #include "StdAfx.h" #include<iostream> #include<stack> template<typename DataType> class BST { public: class Node { public: Node(int data=0):m_dat

有关不同实现类的List的三种遍历方式的探讨

我们知道,List的类型有ArrayList和LinkedList两种,而曾经的Vector已经被废弃. 而作为最常用的操作之一,List的顺序遍历也有三种方式:借助角标的传统遍历.使用内置迭代器和显式迭代器. 下面,将首先给出两种种不同类型实现的实验结果,之后,将会通过分析JAVA中List的各种实现,来探讨造成实验结果的原因. 1.随机数据的生成 package temp; import java.io.*; import java.util.Random; public class Dat

重温数据结构:二叉树的常见方法及三种遍历方式 Java 实现

读完本文你将了解到: 什么是二叉树 Binary Tree 两种特殊的二叉树 满二叉树 完全二叉树 满二叉树 和 完全二叉树 的对比图 二叉树的实现 用 递归节点实现法左右链表示法 表示一个二叉树节点 用 数组下标表示法 表示一个节点 二叉树的主要方法 二叉树的创建 二叉树的添加元素 二叉树的删除元素 二叉树的清空 获得二叉树的高度 获得二叉树的节点数 获得某个节点的父亲节点 二叉树的遍历 先序遍历 中序遍历 后序遍历 遍历小结 总结 树的分类有很多种,但基本都是 二叉树 的衍生,今天来学习下二

树的高度,深度,层数和三种遍历方式

树的高度: 当只有一个根节点的时候,高度就是0. //计算树的高度int depth(Node node){ if(node == NULL) return -1; int l = depth(node->left); int r = depth(node->right); return (l < r)?(r+1):(l+1);//当只有一个根节点的时候,高度就是-1+1=0} 层数: 树的高度最底下的为第1层(有的书定义为第0层),依次向上累加 树的深度: 完全二叉树是指这样的二叉树:

set的三种遍历方式-----不能用for循环遍历(无序)

set的三种遍历方式,set遍历元素 list 遍历元素 http://blog.csdn.net/sunrainamazing/article/details/71577662 set遍历元素 http://blog.csdn.net/sunrainamazing/article/details/71577893 map遍历元素 http://blog.csdn.net/sunrainamazing/article/details/71580051 package sun.rain.amazi

十八 二分搜索树的三种遍历方式

三种遍历方式: package com.lt.datastructure.BST; public class BST<E extends Comparable<E>> { private class Node{ public E e; Node left,right; public Node(E e) { this.e = e; this.left = left; this.right = right; } } private Node root; private int size

for 、foreach 、iterator 三种遍历方式的比较

习惯用法 for.foreach循环.iterator迭代器都是我们常用的一种遍历方式,你可以用它来遍历任何东西:包括数组.集合等 for 惯用法: List<String> list = new ArrayList<String>(); String[] arr = new String[]{"1,2,3,4"}; for(int i = 0;i < arr.length;i++){ System.out.println(arr[i]); } for(i

java中ArrayList集合的三种遍历方式

public class ListDemo { public static void main(String[] args) { ArrayList<String> mList = new ArrayList<>(); mList.add("郭靖"); mList.add("黄蓉"); mList.add("洪七公"); mList.add("周伯通"); // 第一种遍历方式:普通for循环 for

完全二叉树的三种遍历方式

二叉树的遍历方法有多种,最常用的有中序遍历.先序遍历和后序遍历.毫无例外,这三种遍历方法都是基于递归/迭代的思想 为了更好的说明三种遍历,结合图片. 假设现在存在{1,3,5,7,9,2,4,6,8,10}的一个完全二叉树 中序遍历:遍历时先尝试访问当前结点的左子结点,如果左子结点不存在,则读取当前结点的数据,然后再访问当前结点的右子结点.对应的遍历结果是:6 7 8 3 10 9 1 2 5 4 先序遍历:遍历时先读取当前结点的数据,然后在访问当前结点左子结点.仅当左子结点不存在,则访问右子结