1樓:hiJack
1.陣列的記憶體是是靜態,vector的記憶體是動態,可能發生拷貝變動。
2.陣列效率高,vector效率相對低,因為vector實質上是在陣列的基礎上實現的。
3.陣列可以與C相容,vector不可以
除此之外沒有區別,vector更方便
2樓:陳禮
原因很多,舉個例子,部分驅動程式是用c++寫的。
在非使用者模式下,使用得是最簡單的結構。
至於為啥不用c寫,Linux沒這煩惱Windows驅動用wdk。
其它通訊協議的,也不會用直接用vector。
見多了就明白。
3樓:粉蒸排骨
c++中為什麼陣列不能被vector完全替代?
int arrayX[2];
std::vector vectorY ;
int* pX = & arrayX[1];
// pX在arrayX的作用域內始終有效int* pY = & vectorY[1];
// pY在vectorY新增元素後可能會失效!!!
auto itr = vectorY.begin();
// itr在vectorY新增元素後可能會失效!!!
原因是當你向vector內新加元素時,如果它發現自己空間不夠了,會重新分配乙個更大的空間,然後把原有資料全部複製過去,再釋放掉舊buffer。然後,你之前獲取的不論是指標還是迭代子,都失效了。
這權且算乙個vector不能替代陣列的小點吧。
4樓:xchg
vector內部使用了動態記憶體分配,而區域性變數的C陣列在棧上分配。分配速度差距很大,棧上分配只需要把棧頂指標暫存器改變即可。不過c++11之後有std::
array可以替代C陣列。
有些情況也需要使用vector的,比如要開闢乙個大陣列,這時候如果使用c陣列或者std::array有可能棧就爆了。
5樓:Sinaean Dean
個人感覺還是效率問題。我實實在在的用vector替代過c陣列,最後又改回來了。
比較明顯的問題乙個是分配的記憶體大小不可控,有時浪費記憶體明顯。另乙個問題是速度,new乙個vector會自動清零,也就是額外多了乙個memset,有時可能不是memset,而是for loop。
6樓:肖堂-數蠶
vector是動態分配的,/*pop或erase釋放重新分配會造成部分場景下的效能下降,千萬不要做出這種實現,否則可能在特殊條件下效能急劇下降,c++標準中要求相關實現不進行完整的記憶體重新分配*/
pop或erase未釋放則會造成的記憶體的浪費,所以使用時必須小心。可能需要手動的過程,此時和對陣列操作類似,因此無法替代陣列。
另外vector是動態記憶體分配的,對於相當多的場合下並不需要改變陣列大小,這時顯然直接使用陣列更方便,效能也更好。
7樓:d41d8c
因為vector醜。
vector> v(3, vector(3));
// 對比
int v[3][3];
8樓:Hocker
看應用,每種資料結構都有它的優勢。如果說vector陣列的優勢是可變,那比vector靈活的資料結構也很多,比如說各種樹結構。但vector也有他的優勢,實現和使用簡單。
所以應用場景決定你用什麼資料結構而不是那樣萬金油就用誰。
如果是初學者建議一步一步來,慢慢體會和掌握每種結構的優勢,為以後專案開發打下基礎。
為什麼c 中陣列不能直接拷貝給另一陣列?
d41d8c 結構體的拷貝建構函式中,陣列可以拷貝。lambda的拷貝捕獲可以捕獲陣列 int a 2 a structured binding也可以產生陣列的拷貝 int a 2 auto x,y a 中,x和y繫結到a的副本中的元素。甚至char a asdf 這種初始化也可以看作陣列拷貝的特例...
玩lol中單為什麼總是不能c?
Yyyyyyyyyjs 卡牌加里奧不是用來給你c的,是用來幫隊友c的發條沙皇如果不是實力碾壓,是需要別人幫你創造條件,你才能c的,要隊友幫你拖過發育期 然而現實是全圖流沒地飛,三線炸,或者幫了不拿資源白幫,發育流誰都來你中路吃線,你敢去別路補發育隊友就敢4打5 中單想c雙排工具人打野拿順手的一路殺穿...
為什麼C 的陣列必須要指明尺寸大小
作為小白,剛才解決了乙個bug。程式編譯沒問題,但是一執行就Segmentation fault core dumped 後來查資料,發現在對陣列賦值前,要先初始化其大小,比如 double a 50 或者在後面用,a.resize 50 來確定大小。小白回答,請輕噴。 編譯可執行檔案時,區域性變數...