訪問vector元素方法的效率比較
比較訪問vector元素的兩種方式:
一、使用下標訪問;
二、使用迭代器(類似指標)訪問。
程式碼:
#include<iostream>
#include<vector>
#include<windows.h>
using namespace std;
int main(){
vector<int> vec;
vec.resize(100010000);
//實驗組一
int start=GetTickCount();
for(int i=0;i<vec.size();i++){
vec[i]=i;
}
int end=GetTickCount();
cout<<"實驗組一: for迴圈中使用下標方式,i++方式,迴圈體內使用下標賦值 "<<endl;
cout<<(end-start)<<endl;
//實驗組二
start=GetTickCount();
for(int i=0;i<vec.size();++i){
vec[i]=i;
}
end=GetTickCount();
cout<<"實驗組二: for迴圈中使用下標方式,++i方式,迴圈體內使用下標賦值"<<endl;
cout<<(end-start)<<endl;
int i;
//實驗組三
start=GetTickCount();
i=0;
for(vector<int>::iterator it=vec.begin();i<vec.size();i++,++it){
*it=i;
}
end=GetTickCount();
cout<<"實驗組三: for迴圈中使用迭代器,迭代器++it方式,迴圈體內使用迭代器(向量)賦值 "<<endl;
cout<<(end-start)<<endl;
//實驗組四
start=GetTickCount();
i=0;
for(vector<int>::iterator it=vec.begin();i<vec.size();i++,++it){
vec[i]=i;
}
end=GetTickCount();
cout<<"實驗組四: for迴圈中使用迭代器,迭代器++it方式,迴圈體內使用下標賦值 "<<endl;
cout<<(end-start)<<endl;
//實驗組五
start=GetTickCount();
i=0;
for(vector<int>::iterator it=vec.begin();i<vec.size();i++,it++){
*it=i;
}
end=GetTickCount();
cout<<"實驗組五: for迴圈中使用迭代器,迭代器it++方式,迴圈體內使用迭代器(向量)賦值 "<<endl;
cout<<(end-start)<<endl;
//實驗組六
start=GetTickCount();
for(vector<int>::iterator it=vec.begin();it!=vec.end();it++){
*it=i;
}
end=GetTickCount();
cout<<"實驗組六: for迴圈中使用迭代器,迭代器it++方式,用end()判斷結束,迴圈體內使用迭代器(向量)賦值 "<<endl;
cout<<(end-start)<<endl;
return 0;
}
結果:
結論:
1、int型i,i++與++i速度相差無幾; (對比一二,453, 454)
2、賦值時,迭代器訪問要比下標訪問快,即 *it=i 比 vec[i]=i 速度快; (對比三四,578,609)
3、對於迭代器 vector<int>::iterator it, ++it 比 it++ 快很多; (對比三五,578,1094)
4、用 it!=vec.end() 判斷迴圈結束,耗時比較久; (對比五六, 1094, 1937)
5、總結:遍歷vector時,用下標訪問即可。
ps: vec.end(),返回最末元素的下一個位置的迭代器,求最末元素數值可用: *(vec.end()-1) 。
①、vec.front() ,vec.back(),返回第一個元素,最後一個元素;
②、vec.begin(), vec.end(),返回第一個元素的迭代器,最後一個元素的下一個位置的迭代器。
相關文章
- javascript訪問不同物件的速度比較JavaScript物件
- Rust的Vector vs. Golang的Slice比較RustGolang
- TreeMap和HashMap的元素比較HashMap
- 執行緒等待兩種方法的喚醒的效率比較執行緒
- vector訪問與賦值賦值
- ECode1024 | String拼接方法concat與+效率比較問題
- 【MyBatis】幾種批量插入效率的比較MyBatis
- kotlin 集合內元素比較Kotlin
- Vector用陣列下標訪問的條件陣列
- Java 容器和泛型(2)ArrayList 、LinkedList和Vector比較Java泛型
- 三大公用DNS伺服器訪問速度比較分析DNS伺服器
- vector容器1(新增元素,遍歷元素)
- iframe 元素跨域訪問跨域
- jQuery的prop和attr方法比較jQuery
- 不同備份方法的特性比較
- Cesium 比較常用的幾個方法
- 比較兩個陣列中是否有相同的元素陣列
- HashMap,LinkedHashMap,TreeMap讀取大量資料效率的比較HashMap
- initialize方法與load方法比較
- switch...case && if...else效率比較和優化優化
- 透過sql trace比較常規 not in 、minus、not exists效率SQL
- 通過sql trace比較常規 not in 、minus、not exists效率SQL
- c++ vector刪除元素C++
- 訪問控制之9種元素
- 分割陣列的幾種方法比較陣列
- 四種在Javascript比較物件的方法JavaScript物件
- 頁面註冊js的方法比較JS
- 分享幾個比較提高工作效率的軟體
- 併發程式設計:DEMO:比較Stream和forkjoin框架的效率程式設計框架
- oracle pl/sql 迴圈比較集合元素是否相同OracleSQL
- php比較運算子的安全問題PHP
- Java位元組流檔案複製及效率比較Java
- 版本號比較大小問題
- Java 字串比較、拼接問題Java字串
- 去除csdn廣告的方法,多種方法比較總結
- python如何訪問元組中的元素Python
- 不用for迭代 --手工訪問迭代器中的元素.
- STL.vector容器刪除單個元素、部分元素、全部元素