簡體   English   中英

C ++中的STL容器實際上是如何實現的..

[英]How are STL containers in C++ actually implemented..

我被問到這個問題很多。 我讀過各種來源,包括Bjarne Stroustrup的書。 它表示該標准並未要求對STL容器進行任何實施。 但我還不清楚。 如果實現沒有授權,是否意味着在我的代碼中使用向量或列表時,它可能在不同的時間使用不同的數據結構? 如果是這樣的話,如何決定在哪個時間使用哪種數據結構? 我的意思是,如果不修復所有STL容器每次都會使用特定的DS?

該標准沒有規定應該使用哪些數據結構來實現STL容器,但它確實提供了復雜性保證,有時還提供其他保證(如使用連續內存的vector ),這通常會限制合理使用的數據結構的選擇。實施少數選擇。

它可能在不同的時間使用不同的數據結構?

是的,可能。 但我們需要明確定義“不同的時間”。 如果使用標准庫實現I為平台P編譯它,那么只要運行該程序,它將使用相同的數據結構。 如果更改P或I並重新編譯,則可以使用其他數據結構。 “不同時間”由構建分隔。

如何決定在哪個時間使用哪種數據結構?

該標准強加了漸近復雜性要求,因此這是一個很大的標准。 除此之外,實現者可以在滿足這些要求的不同數據結構之間進行選擇。 由於實施者也了解平台,因此他們可能會選擇在您構建的特定平台上表現更好的數據結構。

我的意思是,如果不修復所有STL容器每次都會使用特定的DS嗎?

不會。如果有人明天提出一個非常酷和高效的數據結構,那么可以完全滿足並超出某些標准庫容器的要求呢? 如果數據結構在規范中設置固定,而不是復雜性,則不允許使用這種更好的實現。 直到C ++標准可能更新,這個過程可能需要數年時間。

軟件工程是關於平衡規范和抽象。 您必須指定解決問題所需的內容,並抽象出與解決方案無關的詳細信息。 如果過度指定,則會失去靈活性。 但要注意不要過度抽象而失去性能。 標准庫是一個很好的案例研究,試圖平衡兩者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM