listvector存儲
『壹』 要插入十萬的數據量,vector和list效率哪個高
ArrayList和Vector都是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢,Vector由於使用了synchronized方法(線程安全),通常性能上較ArrayList差,而LinkedList使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。
『貳』 list和vector有什麼區別
ArrayList和Vector的區別
這兩個類都實現了List介面(List介面繼承了Collection介面),他們都是有序集合,即存儲在這兩個集合中的元素的位置都是有順序的,相當於一種動態的數組,我們以後可以按位置索引號取出某個元素,並且其中的數據是允許重復的
接著才說ArrayList與Vector的區別,這主要包括兩個方面:.
(1)同步性:
Vector是線程安全的,也就是說是它的方法之間是線程同步的,而ArrayList是線程序不安全的,它的方法之間是線程不同步的。
如果只有一個線程會訪問到集合,那最好是使用ArrayList,因為它不考慮線程安全,效率會高些;
如果有多個線程會訪問到集合,那最好是使用Vector,因為不需要我們自己再去考慮和編寫線程安全的代碼。
(2)數據增長:
ArrayList與Vector都有一個初始的容量大小,當存儲進它們裡面的元素的個數超過了容量時,就需要增加ArrayList與Vector的存儲空間,每次要增加存儲空間時,不是只增加一個存儲單元,而是增加多個存儲單元,每次增加的存儲單元的個數在內存空間利用與程序效率之間要取得一定的平衡。
Vector默認增長為原來兩倍,而ArrayList的增長策略在文檔中沒有明確規定(從源代碼看到的是增長為原來的1.5倍)。
ArrayList與Vector都可以設置初始的空間大小,Vector還可以設置增長的空間大小,而ArrayList沒有提供設置增長空間的方法。
總結:即Vector增長原來的一倍,ArrayList增加原來的0.5倍。
簡單列個表格
『叄』 vector容器與list容器的區別和聯系
樓主,首先我要說樓上說的是java的語法。
就其本質,如果你學習過數據結構的話,應該會明白array與list的區別。vector就是一個可靠版本的array.
如果不明白我打個比方吧,比如游戲中第一關打完第二關,第二關打完第三關,這種鏈式的結構就適合用list,而一些毫無關聯的數據集合,比如你網路游戲中一個場景中出現的隨機怪物就可以用vector,當然我說的只是例子,實際的數據結構會復雜很多。。
另外如果你的數據集合經常涉及插入,刪除的操作,那就跟適合用list了,只是查找操作比較多適合用vector.
『肆』 怎樣把C++中的list或者vector存入文件
因為這兩個的數據結構都不是數組那樣的一坨連續空間啊。vector為例,你直接存文件的話存的是元素個數和存儲空間的首地址,根本沒存內容,當然首地址存了也沒意義。list是鏈表更不用說了。
還是老老實實一個一個存吧。當然普通的vector可以偷懶存長度然後直接取第一個元素地址當數組存。讀的時候讀長度,初始化vector,還是取第一個元素地址當數組讀。
『伍』 list和vector的區別
恩,是這樣的,因為list是鏈表,它的元素是不連續的。vector則是連續的。
例如:
1
2
3
vector則是
a[0]
=
1
a[1]
=
2
a[3]
=
3
list則是
a
=
1
a.right
=
2
a.right.right
=
3
『陸』 vector和list的用法區別
vector與list區別
vector為存儲的對象分配一塊連續的地址空間,因此對vector中的元素隨機訪問效率很高。在vecotor中插入或者刪除某個元素,需要將現有元素進行復制,移動。如果vector中存儲的對象很大,或者構造函數復雜,則在對現有元素進行拷貝時開銷較大,因為拷貝對象要調用拷貝構造函數。對於簡單的小對象,vector的效率優於list。vector在每次擴張容量的時候,將容量擴展2倍,這樣對於小對象來說,效率是很高的。
list中的對象是離散存儲的,隨機訪問某個元素需要遍歷list。在list中插入元素,尤其是在首尾插入元素,效率很高,只需要改變元素的指針。
綜上所述:
vector適用:對象數量變化少,簡單對象,隨機訪問元素頻繁
list適用:對象數量變化大,對象復雜,插入和刪除頻繁
最大的區別是,list是雙向的,而vector是單向的。
因此在實際使用時,如何選擇這三個容器中哪一個,應根據你的需要而定,一般應遵循下面
的原則:
1、如果你需要高效的隨即存取,而不在乎插入和刪除的效率,使用vector
2、如果你需要大量的插入和刪除,而不關心隨即存取,則應使用list
3、如果你需要隨即存取,而且關心兩端數據的插入和刪除,則應使用deque。
vector
表示一段連續的內存區域,每個元素被順序存儲在這段內存中,對vector 的隨機訪問效率很高,但對非末尾元素的插入和刪除則效率非常低。
deque
也表示一段連續的內存區域,但與vector不同的是它支持高效地在其首部插入和刪除元素,它通過兩級數組結構來實現,一級表示實際的容器,第二級指向容器的首和尾
list
表示非連續的內存區域並通過一對指向首尾元素的指針雙向鏈接起來,插入刪除效率高,隨機訪問效率低
2,stl提供了三個最基本的容器:vector,list,deque。
vector和built-in數組類似,它擁有一段連續的內存空間,並且起始地址不變,因此
它能非常好的支持隨即存取,即[]操作符,但由於它的內存空間是連續的,所以在中間
進行插入和刪除會造成內存塊的拷貝,另外,當該數組後的內存空間不夠時,需要重新
申請一塊足夠大的內存並進行內存的拷貝。這些都大大影響了vector的效率。
list就是數據結構中的雙向鏈表(根據sgi
stl源代碼),因此它的內存空間可以是不連續
的,通過指針來進行數據的訪問,這個特點使得它的隨即存取變的非常沒有效率,因此它
沒有提供[]操作符的重載。但由於鏈表的特點,它可以以很好的效率支持任意地方的刪除
和插入。
deque是一個double-ended queue,它的具體實現不太清楚,但知道它具有以下兩個特點:
它支持[]操作符,也就是支持隨即存取,並且和vector的效率相差無幾,它支持在兩端的
操作:push_back,push_front,pop_back,pop_front等,並且在兩端操作上與list的效率
也差不多。
因此在實際使用時,如何選擇這三個容器中哪一個,應根據你的需要而定,一般應遵循下面
的原則:
1、如果你需要高效的隨即存取,而不在乎插入和刪除的效率,使用vector
2、如果你需要大量的插入和刪除,而不關心隨即存取,則應使用list
3、如果你需要隨即存取,而且關心兩端數據的插入和刪除,則應使用deque。
『柒』 list,vector和deque的區別
1、vector
連續存儲結構,每個元素在內存上是連續的;支持高效的隨機訪問和在尾端插入/刪除操作,但其他位置的插入/刪除操作效率低下;相當於一個數組,但是與數組的區別為:內存空間的擴展。vector支持不指定vector大小的存儲,但是數組的擴展需要程序員自己寫。
vector的內存分配實現原理:
STL內部實現時,首先分配一個非常大的內存空間預備進行存儲,即capacity()函數返回的大小,當超過此分配的空間時再整體重新放分配一塊內存存儲(VS6.0是兩倍,VS2005是1.5倍),所以這給人以vector可以不指定vector即一個連續內存的大小的感覺。通常此默認的內存分配能完成大部分情況下的存儲。
擴充空間(不論多大)都應該這樣做:
(1)配置一塊新空間
(2)將舊元素一一搬往新址
(3)把原來的空間釋放還給系統
註:vector 的數據安排以及操作方式,與array 非常相似。兩者的唯一差別在於空間的利用的靈活性。Array 的擴充空間要程序員自己來寫。
vector類定義了好幾種構造函數,用來定義和初始化vector對象:
vector<T> v1; vector保存類型為T的對象。默認構造函數v1為空。
vector<T> v2(v1); v2是v1的一個副本。
vector<T> v3(n, i); v3包含n個值為i的元素。
vector<T> v4(n); v4含有值初始化的元素的n個副本。
2、deque
連續存儲結構,即其每個元素在內存上也是連續的,類似於vector,不同之處在於,deque提供了兩級數組結構, 第一級完全類似於vector,代表實際容器;另一級維護容器的首位地址。這樣,deque除了具有vector的所有功能外,還支持高效的首/尾端插入/刪除操作。
deque 雙端隊列 double-end queue
deque是在功能上合並了vector和list。
優點:(1) 隨機訪問方便,即支持[ ]操作符和vector.at()
(2) 在內部方便的進行插入和刪除操作
(3) 可在兩端進行push、pop
缺點:佔用內存多
使用區別:
(1)如果你需要高效的隨即存取,而不在乎插入和刪除的效率,使用vector
(2)如果你需要大量的插入和刪除,而不關心隨機存取,則應使用list
(3)如果你需要隨機存取,而且關心兩端數據的插入和刪除,則應使用deque
3、list
非連續存儲結構,具有雙鏈表結構,每個元素維護一對前向和後向指針,因此支持前向/後向遍歷。支持高效的隨機插入/刪除操作,但隨機訪問效率低下,且由於需要額外維護指針,開銷也比較大。每一個結點都包括一個信息快Info、一個前驅指針Pre、一個後驅指針Post。可以不分配必須的內存大小方便的進行添加和刪除操作。使用的是非連續的內存空間進行存儲。
優點:(1) 不使用連續內存完成動態操作。
(2) 在內部方便的進行插入和刪除操作
(3) 可在兩端進行push、pop
缺點:(1) 不能進行內部的隨機訪問,即不支持[ ]操作符和vector.at()
(2) 相對於verctor佔用內存多
使用區別:
(1)如果你需要高效的隨即存取,而不在乎插入和刪除的效率,使用vector
(2)如果你需要大量的插入和刪除,而不關心隨機存取,則應使用list
(3)如果你需要隨機存取,而且關心兩端數據的插入和刪除,則應使用deque