C++中 list與vector的區別

C++中 list與vector的區別

引用http://www.cnblogs.com/shijingjing07/p/5587719.html

?

C++ vector和list的區別

1.vector數據結構
vector和數組類似,擁有一段連續的內存空間,并且起始地址不變。
因此能高效的進行隨機存取,時間復雜度為o(1);
但因為內存空間是連續的,所以在進行插入和刪除操作時,會造成內存塊的拷貝,時間復雜度為o(n)。
另外,當數組中內存空間不夠時,會重新申請一塊內存空間并進行內存拷貝。

2.list數據結構
list是由雙向鏈表實現的,因此內存空間是不連續的。
只能通過指針訪問數據,所以list的隨機存取非常沒有效率,時間復雜度為o(n);
但由于鏈表的特點,能高效地進行插入和刪除。

3.vector和list的區別
我們看一個簡單的vector和list使用示例:

復制代碼
#include<iostream>
#include<vector>
#include<list>
using namespace std;
int main()
{vector<int> v;list<int> l;for(int i=0;i<8;i++) 往v和l中分別添加元素{v.push_back(i);l.push_back(i);}cout<<"v[2]="<<v[2]<<endl;//cout<<"l[2]="<<l[2]<<endl;  //編譯錯誤,list沒有重載[]cout<<(v.begin()<v.end())<<endl; //cout<<(l.begin()<l.end())<<endl; /編譯錯誤,list::iterator沒有重載<或>cout<<*(v.begin()+1)<<endl;//cout<<*(l.begin()+1)<<endl; //編譯錯誤,list::iterator沒有重載+vector<int>::iterator itv=v.begin();list<int>::iterator itl=l.begin();itv = itv+2;//itl=itl+2; //編譯錯誤,list::iterator沒有重載+itl++; //list::iterator中重載了++,只能使用++進行迭代訪問。itl++;cout<<*itv<<endl;cout<<*itl<<endl;getchar();return 0;
}
復制代碼

vector擁有一段連續的內存空間,能很好的支持隨機存取,
因此vector<int>::iterator支持“+”,“+=”,“<”等操作符。

list的內存空間可以是不連續,它不支持隨機訪問,
因此list<int>::iterator則不支持“+”、“+=”、“<”等

vector<int>::iterator和list<int>::iterator都重載了“++”運算符。

總之,如果需要高效的隨機存取,而不在乎插入和刪除的效率,使用vector;
如果需要大量的插入和刪除,而不關心隨機存取,則應使用list。

posted on 2017-03-17 21:50 wj0816 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/wj0816/p/6568630.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/372637.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/372637.shtml
英文地址,請注明出處:http://en.pswp.cn/news/372637.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用Struts 2的查詢網格(無插件)

當將jQuery與struts 2一起使用時&#xff0c;開發人員被說服使用struts2-jQuery插件 。 因為大多數論壇和其他Internet資源都支持struts2 jQuery插件。我有這種經驗。 我想將Struts 2使用jQuery Grid插件&#xff0c;但不使用struts2 jQuery插件。 對于我而言&#xff0c;很難找…

php reflectionmethod,PHP ReflectionMethod getClosure()用法及代碼示例

ReflectionMethod::getClosure()函數是PHP中的一個內置函數&#xff0c;用于為該方法返回動態創建的閉包&#xff0c;否則&#xff0c;在出現錯誤的情況下返回NULL。用法:Closure ReflectionMethod::getClosure ( $object )參數&#xff1a;該函數接受參數對象&#xff0c;該參…

java學習筆記--IO流

第十二章大綱&#xff1a; I/O input/output 輸入/輸出 一、創建文件&#xff0c;借助File類來實現 file.createNewFile() &#xff1a; 創建文件 file.exists() &#xff1a; 判斷文件是否存在&#xff0c;如果存在&#xff0c;則返回true delete() &#xff1a; 刪除文件&…

linux命令之kill篇

作業四&#xff1a;查詢firewall進程&#xff0c;然后殺死 [rootlocalhost 桌面]# ps -aux |grep firewall root 772 0.0 2.0 327912 20704 ? Ssl 15:23 0:00 /usr/bin/python -Es /usr/sbin/firewalld --nofork --nopid root 5323 0.0 0.0 112660…

ActiveMQ網絡連接器

這篇文章對我和任何對網絡連接器如何為ActiveMQ工作感興趣的ActiveMQ貢獻者而言都是更多的內容。 我最近花了一些時間查看代碼&#xff0c;并認為最好畫一些快速的圖表來幫助我記住我學到的東西&#xff0c;并在將來發現問題時幫助將來確定在哪里進行調試。 如果我輸入有誤&…

《程序設計與數據結構》第3周學習總結

學號 20162317 《程序設計與數據結構》第3周學習總結 教材學習內容總結 第三章的內容相比之前兩章更為具體&#xff0c;介紹的內容更為集中&#xff0c;主要說到了類和對象的問題&#xff0c;其中也仔細介紹了String類、Random類、Math類、NumberFormat類等類。此外也說到了與類…

Java中帶有JWebSocket的WebServerSocket

首先&#xff0c;轉到http://jwebsocket.org/下載2個軟件包Server and Client。 如果要查看源代碼&#xff0c;請下載源代碼包。 服務器 解壓縮服務器程序包。 轉到“ conf”文件夾 選擇“ jWebSocket.xml”文件打開 編輯“ jWebSocket.xml”文件&#xff0c;在標簽<dom…

OpenCV入門指南----人臉檢測

本篇介紹圖像處理與模式識別中最熱門的一個領域——人臉檢測&#xff08;人臉識別&#xff09;。人臉檢測可以說是學術界的寵兒&#xff0c;在不少EI&#xff0c;SCI高級別論文都能看到它的身影。甚至很多高校學生的畢業設計都會涉及到人臉檢測。當然人臉檢測的巨大實用價值也讓…

matlab提取艾里斑,艾里斑:我不是雀斑

正是艾里斑&#xff0c;限制了光學儀器的精度我們知道凸透鏡能把入射光會聚到它的焦點上&#xff0c;由于透鏡的口徑有一定大小&#xff0c;限制了光線的傳播&#xff0c;所以凸透鏡也會發生衍射。這導致透鏡無法把光線會聚成無限小的點&#xff0c;而只會在焦點上形成具有一定…

mysql啟動錯誤排查-無法申請足夠內存

一般情況下mysql的啟動錯誤還是很容易排查的&#xff0c;但是今天我們就來說一下不一般的情況。拿到一臺服務器&#xff0c;安裝完mysql后進行啟動&#xff0c;啟動錯誤如下&#xff1a; 有同學會說&#xff0c;哥們兒你是不是buffer pool設置太大了&#xff0c;設置了96G內存。…

Spring vs Guice:重要的一個關鍵區別

根據彈簧對象的名稱識別它們 不管使用XML還是Java配置都沒有關系&#xff0c;Spring范圍大致類似于Map <String&#xff0c;Object>結構。 這意味著您不能有兩個名稱相同的對象 。 為什么這是一件壞事&#xff1f; 如果您的大型應用程序包含許多Configuration類或XML文件…

php 批量更新死鎖,php – 在嘗試獲取鎖定時,哪個查詢導致死鎖;嘗試重新啟動事務...

我無法弄清楚哪個Query在嘗試獲取鎖定時導致死鎖;嘗試重新啟動事務.我的mysql包裝器有以下幾行if (mysql_errno($this->conn) 1213) {$this->bug_log(0,"Deadlock. SQL:".$this->sql);}bug_log寫入文件的位置.錯誤日志文件沒有死鎖錯誤,但/var/log/mysqld.…

Task和BackTask

一、總結性知識點&#xff1a; 1、Android應用運行時會創建任務Task&#xff0c;用于存放主窗口2、每一個任務包含一個堆棧數據結構&#xff0c;用于保存當前應用已創建的窗口對象&#xff0c;這個堆棧即回退棧BackStack3&#xff64; 位于回退棧頂的窗口會處于焦點狀態4&#…

Java面試題二

1、public、private、protected、Friendly的區別與作用域 public,protected,friendly,private的訪問權限如下&#xff1a; 關鍵字 當前類 包內 子孫類 包外 public √ √ √ √ protected…

使用Spring Roo進行快速云開發–第1部分:Google App Engine(GAE)

Spring Roo是在Java平臺上提供快速應用程序開發的工具。 我已經解釋了何時使用它&#xff1a; http : //www.kai-waehner.de/blog/2011/04/05/when-to-use-spring-roo 。 Spring Roo目前支持兩種針對云計算的解決方案&#xff1a;Google App Engine&#xff08;GAE&#xff09;…

mysql 重裝,Windows系統中完全卸載MySQL數據庫實現重裝mysql

一、在控制面板&#xff0c;卸載MySQL的所有組件控制面板——》所有控制面板項——》程序和功能&#xff0c;卸載所有和MySQL有關的程序二、找到你的MysQL安裝路徑&#xff0c;看還有沒有和MySQL有關的文件夾&#xff0c;全刪如果安裝在C盤&#xff0c;檢查一下C:\Program File…

loadrunner 關聯

1、記住關聯的位置&#xff08;之前&#xff09;&#xff0c;因為登錄之前需要token&#xff0c;才能驗證登錄是否成功&#xff0c;所以&#xff0c;放在登錄之前 轉載于:https://www.cnblogs.com/zyp1/p/5692343.html

網頁上線后音頻不能自動播放

一、問題描述 開發環境谷歌瀏覽器本地測試通過&#xff0c;網站上線后的音樂不播放&#xff0c;而是自動下載&#xff1f; 開發環境safari瀏覽器中&#xff0c;音頻不播放。 二、問題分析 用audio或者embed標簽都有問題&#xff0c;為了節省用戶的流量&#xff0c;安卓和ios都默…

Akka STM –與STM Ref和Agent進行乒乓球比賽

乒乓是一個經典示例&#xff0c;其中2個玩家&#xff08;或線程&#xff09;訪問共享資源–乒乓球桌并在彼此之間傳遞Ball&#xff08;狀態變量&#xff09;。 使用任何共享資源&#xff0c;除非我們同步訪問&#xff0c;否則線程可能會遇到潛在的死鎖情況。 PingPong算法非常簡…

c mysql二進制,MySQL運用connector C/C+讀取二進制字段

MySQL使用connector C/C讀取二進制字段MySQL使用connector C/C讀取二進制字段&#xff0c;兩種方法&#xff1a;用getStringvector vec;while (pResultSet->next()){string str pResultSet->getString("data");vec.insert(vec.end(), str.begin(), str.end())…