簡體   English   中英

為什么std :: vector erase需要begin()?

[英]why is begin() needed in std::vector erase?

為什么我們要編寫v.erase(v.begin(), v.begin()+3)

為什么它不被定義為erase(int, int)所以你可以編寫v.erase(0,2)並且實現負責begin() s?

接口container.erase(iterator, iterator)更通用,適用於沒有索引的容器,如std::list 如果您編寫模板並且不確切地知道代碼要處理哪個容器,這是一個優勢。

原始設計旨在盡可能通用,迭代器比索引更通用。 設計人員可以vector添加額外的基於索引的重載,但決定不這樣做。

在STL中,迭代器是唯一提供對STL容器的一般訪問的實體。

可以通過指針和索引訪問數組數據結構。 迭代器是這些索引/指針的泛化。
可以使用移動指針訪問鏈接列表(la ptr = ptr->next )。 迭代器是對這些的泛化。
Trees和HashTables需要特殊的迭代器類,它封裝了迭代這些數據結構的邏輯。

如您所見,迭代器是一般類型,它允許您對數據結構執行常見操作(如迭代,刪除等),而不管它們的底層實現如何。

這樣,您可以重構代碼以使用std::listcontainer.erase(it0, it1)仍然可以在不修改代碼的情況下工作。

暫無
暫無

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

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