我正在研究容器及其不同的性能。
當,對于 a vector,我讀到類似的東西
“插入背面以外的元素很慢”
但對于一個list:
“隨時快速插入/洗掉”
我的問題是:
向量與串列的不同之處在于上面兩個句子是真的嗎?
它的向量構建方式與串列有何不同?
是因為它們將元素存盤在不同的記憶體部分嗎?
我正在搜索一些資源以更好地理解這些概念。
uj5u.com熱心網友回復:
所有示例都將鏈接到 C 語言,因為我相信它在那里得到了完美的描述
向量
向量與動態陣列相同,能夠在插入或洗掉元素時自動調整自身大小,其存盤由容器自動處理。向量元素被放置在連續的存盤中,以便可以使用迭代器訪問和遍歷它們。在向量中,資料插入在末尾。最后插入需要不同的時間,因為有時可能需要擴展陣列。洗掉最后一個元素只需要恒定的時間,因為不會發生大小調整。在開始或中間插入和擦除在時間上是線性的。
Vector 是動態陣列,但它可以管理分配給自己的記憶體。這意味著您可以創建長度在運行時設定的陣列,而無需使用 new 和 delete 運算子(顯式指定記憶體的分配和釋放)。
串列
串列是允許非連續記憶體分配的序列容器。與向量相比,串列的遍歷速度較慢,但??一旦找到位置,插入和洗掉就很快。通常,當我們說 List 時,我們談論的是雙向鏈表。為了實作單向鏈表,我們使用前向串列。
有兩種型別的串列:
Double linked list其中每個元素都有[next] 和[previous]的地址,要訪問第一個或最后一個元素,您可以使用特定的函式(例如在 C 中的 front() 或 back() 串列中 -listName.front()將回傳第一個(0)串列中的元素),head.previous指向NULL和tail.next指向NULL;Single linked list其中每個元素只有關于[next]元素的鏈接(知道),并且此串列中的最后一個元素指向NULL。
現在讓我們回到你的問題:
向量與串列的不同之處在于上面的兩個句子是真的嗎?向量與串列的構建方式有何不同?是因為它們將元素存盤在不同的記憶體部分嗎?我正在搜索一些資源以更好地理解這些概念。
正如我所提到的,有 2 種型別的串列(單鏈接和雙喜歡),當您將要擁有它們時,它們會很好:
- 除了串列末尾之外,到處都有許多插入/洗掉;
如果您打算:
- 頻繁訪問串列末尾的插入/洗掉元素;
- 在隨機位置訪問元素(因為您可以用來
[N]在任何點訪問元素,其中 N 是元素的索引/位置。
而在 中,List您需要使用迭代器來訪問位置/索引 N 處的元素。
所以 vector 是一個動態陣列,當您訪問它時,它們往往會執行得更快(因為它沒有額外的包裝器,并且您可以通過指標直接訪問記憶體中的一個點)。
串列是一個序列容器(所以這個容器有一些基本語言功能的包裝器),它通過為用戶提供一些有用的方法來處理它的元素,從而犧牲了一些點來支持插入和洗掉的額外簡單性。
為了解決您的問題,我們可以得出以下結論:
向量
插入后面以外的元素很慢
串列
隨時快速插入/洗掉
這可以通過它們的結構來判斷。
Insertion是 swift inList因為它是一個鏈表,這意味著什么?沒錯,這意味著要實作它的唯一更改就是更改 the[previous ]和[next]item的指標,我們就大功告成了!- Whereas in
Vectorit would take waaaay more time to insert an element anywhere other than at the end. This could be proven by the array concept. If you have an array of one million elements and you want to replace/delete/insert the element at the very beginning of the array it would need to change the position of each element that is coming after the altered element.
List vs Vector Image:

images were taken from this sources: singly linked list double linked list double linked list 2nd image vector
Also, try having a look here vector-vs-list-in-stl. Their comparison is well described there. look through the-c-standard-template-library-stl, by going to the "Containers" section and checking the description and its methods.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/347420.html
上一篇:從串列索引為numpy陣列賦值
下一篇:如何從元組串列創建資料框?
