C++ Vector遍歷的幾種方式及效能對比
幾種容器遍歷方法
1.迭代器
for (std::vector<int>::iterator it = vecTest.begin(); it != vecTest.end(); ++it)
{
tempNum = *it;
}
2.C++11 新增關鍵字auto
for (auto it : vecTest)
{
tempNum = it;
}
3.對C念念不捨的童鞋們習慣的陣列寫法
for (size_t i = 0; i < maxCount; i++)
{
tempNum = vecTest[i];
}
debug模式下執行三次,結果如下:
可以看到方式三的效能遠勝於前兩種,三和一差了十幾倍,這個差別有點大了,不過別急我們再看看release模式下執行狀況,如圖:
剛開始看到這結果時我是這樣的。怎麼會是0,怎麼可以是0,難道我的程式碼有bug!
然後我想這應該是被編譯器優化了,那三段程式碼根本沒執行,於是我在後面加了一句cout << tempNum << endl;
再試一試,看圖:
哦耶,有結果了,可以看到三種方式差別很小,寫程式碼時可以不用糾結用什麼比較高效。
相關推薦
C++ Vector遍歷的幾種方式及效能對比
幾種容器遍歷方法 1.迭代器 for (std::vector<int>::iterator it = vecTest.begin(); it != vecTest.end(); ++it) { tempNum = *it; } 2.C++11 新增關鍵字auto f
C#例項化物件的三種方式及效能對比
## 前言 做專案過程中有個需求要例項化兩萬個物件並新增到List中,這個過程大概需要1min才能載入完(傳參較多),於是開啟了程式碼優化之旅,再此記錄。 首先想到的是可能例項化比較耗時,於是開始對每種例項化方式進行測試,過程如下 ## 例項化方式 **1、用 New 關鍵字例項化一個類** **2、用 Ac
iOS中保證執行緒安全的幾種方式與效能對比
一、前言 前段時間看了幾個開源專案,發現他們保持執行緒同步的方式各不相同,有@synchronized、NSLock、dispatch_semaphore、NSCondition、pthread_mutex、OSSpinLock。後來網上查了一下,發現他們的實現機制各不相同,效能也各不一
map遍歷的幾種方式及效率
1)map的key採用簡單形式和複雜形式時,查詢的效率是不同的,簡單的key值效率更高 2)當資料量大的時候,採用entrySet遍歷key+value的效率要高於keySet 3)當我們只需要取得val
ArrayList和LinkedList的幾種迴圈遍歷方式及效能對比分析 主要介紹ArrayList和LinkedList這兩種list的五種迴圈遍歷方式,各種方式的效能測試對比,根據ArrayLis
主要介紹ArrayList和LinkedList這兩種list的五種迴圈遍歷方式,各種方式的效能測試對比,根據ArrayList和LinkedList的原始碼實現分析效能結果,總結結論。 通過本文你可以瞭解(1)List的五種遍歷方式及各自效能 (2)foreach及Iterator的實現 (3)加
求斐波那契數列第n位的幾種實現方式及效能對比(c#語言)
在每一種程式語言裡,斐波那契數列的計算方式都是一個經典的話題。它可能有很多種計算方式,例如:遞迴、迭代、數學公式。哪種演算法最容易理解,哪種演算法是效能最好的呢? 這裡給大家分享一下我對它的研究和總結:下面是幾種常見的程式碼實現方式,以及各自的優缺點、效能對比。 Iteration using Syst
Python 與 C/C++ 交互的幾種方式
pythonpython作為一門腳本語言,其好處是語法簡單,很多東西都已經封裝好了,直接拿過來用就行,所以實現同樣一個功能,用Python寫要比用C/C++代碼量會少得多。但是優點也必然也伴隨著缺點(這是肯定的,不然還要其他語言幹嘛),python最被人詬病的一個地方可能就是其運行速度了。這這是大部分腳本語言
js中頁面加載完成後執行的幾種方式及執行順序
class 事件 兩種 在哪裏 log 等待 沒有 cti 完成 1:使用jQuery的$(function){}; 2:使用jquery的$(document).ready(function(){});前兩者本質上沒有區別,第1種是第2種的簡寫方式。兩個是document
java之Map集合遍歷幾種方法
package cn.com.javatest.collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; /** * java之Map集合遍歷幾種方法 * * @author:
C++:vector遍歷,拷貝,插入
vector遍歷: 類C遍歷,按插入順序 vector<int> a = {1,2,3,4,5}; for(int i=0;i<a.size();i++) printf("%d%s",a[i],i==a.size()-1?"\n":" "); 迭代器遍歷
C# 寫入檔案的幾種方式
1. FileStream.Write string filePath = Directory.GetCurrentDirectory() + "\\" + Process.GetCurrentProcess().ProcessName + ".txt"; if (File.Exist
類名獲取的幾種方式及單例模式(php語言)
文章來自:原始碼線上https://www.shengli.me/php/343.html 1.__CLASS__:獲取當前的類名 2.get_class():返回物件的類名 3.get_called_class():後期靜態繫
二叉樹遍歷七種方式
數結構 public class TreeNode { public TreeNode left; public TreeNode right; int val; ... } 先序(遞迴) public void preOrder(TreeNode root){
hibernate建立SessionFactory的幾種方式,及原因分析?
全網搜尋不到原因分析,如下是我自己總結的,參考的是原始碼介紹! 1. hibernate3.X SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory
Android的WebView載入網頁的幾種方式及網路異常處理
1.載入本地assert目錄下檔案(error.html) webcontent.loadUrl(" file:///android_asset/error.html "); 2.載入網路url(http://www.csdn.com) webcontent.loadUrl
Android: WebView載入網頁的幾種方式及網路異常處理
1.載入本地assert目錄下檔案(error.html) webcontent.loadUrl(" file:///android_asset/error.html "); 2.載入網路url(http://www.csdn.com) webcontent.loadUrl(" http://www.csd
遍歷兩種方式比較
package main import ( "fmt" ) // make func main() { list := []int{0, 1, 2, 3} list = Test(list) fmt.Println(list) list1 := []int{0,
Java 讀取 properties 配置檔案的幾種方式及注意點
1、引言 java開發中,經常需要讀取配置檔案,有時即使我們方法是對的,但是就是讀取不到需要的內容,會報下面的錯: java.io.FileNotFoundException: sr/configure/config.properties (No such file or dir
opencv學習(五)之畫素遍歷三種方式耗時分析
前面用兩篇介紹了畫素的顏色空間縮減、查詢表、遍歷畫素的三種方式、程式計時等,也說了一下每種方法的優缺點,現在用一個綜合型的程式進行對比。方式是用三種方式對lena影象(220x220)進行處理,使其顏色種類從256中變成64種。在顏色空間縮減方法中講過這種方式,
C#呼叫C++類庫的幾種方式
1、 直接呼叫C++類庫中的公共方法 使用DllImport特性對方法進行呼叫,比如一個C++類庫SampleCppWrapper.dll中的公共方法: extern "C" __declspec(dllexport) int __stdcall Add(int n1, int