爲什麼我們要寫v.erase(v.begin(), v.begin()+3)
?爲什麼begin()在std :: vector中需要擦除?
爲什麼不把它定義爲erase(int, int)
所以你可以寫v.erase(0,2)
和執行照顧begin()
s?
爲什麼我們要寫v.erase(v.begin(), v.begin()+3)
?爲什麼begin()在std :: vector中需要擦除?
爲什麼不把它定義爲erase(int, int)
所以你可以寫v.erase(0,2)
和執行照顧begin()
s?
接口container.erase(iterator, iterator)
更通用,適用於沒有索引的容器,如std::list
。如果您編寫模板並且不確切知道代碼要處理哪個容器,這是一個優勢。
最初的設計目的是儘可能通用和迭代器比指標比較一般。設計師可能添加額外的指數型重載vector
,但決定不。
此外,迭代器可能來自'
在STL中,迭代器是提供對STL容器一般訪問的唯一實體。
的陣列可以通過指針和索引來訪問。迭代器是這些索引/指針的泛化。
鏈接列表可以通過移動指針來訪問(a la ptr = ptr->next
)。迭代器是對這些的泛化。
Trees和HashTable需要特殊的迭代器類,它封裝迭代這些數據結構的邏輯。
正如你所看到的,迭代器是普通型,它允許你對數據結構做常見的操作(如重複,缺失等),不論其底層的實現。
這樣,您可以重構代碼以使用std::list
和container.erase(it0, it1)
,但仍可以在不修改代碼的情況下使用。
,因爲整個工程STL迭代器,它是方便易,因爲如果你想以後改變向量列出,你就不需要更改代碼,如果你使用迭代,沒有這樣的運氣與詮釋。 –