訪問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(),返回第一個元素的迭代器,最後一個元素的下一個位置的迭代器。
相關文章
- ECode1024 | String拼接方法concat與+效率比較問題
- javascript訪問不同物件的速度比較JavaScript物件
- Rust的Vector vs. Golang的Slice比較RustGolang
- TreeMap和HashMap的元素比較HashMap
- vector訪問與賦值賦值
- kotlin 集合內元素比較Kotlin
- 【MyBatis】幾種批量插入效率的比較MyBatis
- ==和equals方法的比較
- Vector用陣列下標訪問的條件陣列
- iframe 元素跨域訪問跨域
- initialize方法與load方法比較
- HashMap,LinkedHashMap,TreeMap讀取大量資料效率的比較HashMap
- 比較兩個陣列中是否有相同的元素陣列
- python如何訪問元組中的元素Python
- Cesium 比較常用的幾個方法
- jQuery的prop和attr方法比較jQuery
- BigDecimal的equals() 和 compareTo() 方法比較Decimal
- 不用for迭代 --手工訪問迭代器中的元素.
- 四種在Javascript比較物件的方法JavaScript物件
- 分割陣列的幾種方法比較陣列
- php比較運算子的安全問題PHP
- 怎樣透過乙太網遠端訪問PLC 較簡單的方法
- 併發程式設計:DEMO:比較Stream和forkjoin框架的效率程式設計框架
- 分享幾個比較提高工作效率的軟體
- STL.vector容器刪除單個元素、部分元素、全部元素
- 版本號比較大小問題
- Java 字串比較、拼接問題Java字串
- Java位元組流檔案複製及效率比較Java
- C++ 順序容器中訪問元素C++
- 去除csdn廣告的方法,多種方法比較總結
- vector clear() 方法 記憶體釋放問題記憶體
- JavaScript 匿名函式與具名函式執行效率比較JavaScript函式
- PHP 5.6,7.0,7.1,7.2 和 HHVM 執行效率比較PHP
- js如何使用索引訪問陣列物件中的元素JS索引陣列物件
- html表格比較寬溢位的解決方法HTML
- 學習AI人工智慧比較快的方法AI人工智慧
- NSDate 時間比較中的時區問題.
- Integer的比較