編寫自訂STL 容器的指南
設計符合STL 約定的新容器時,遵循某些指南至關重要以確保其正確行為並與STL 庫整合。
迭代器介面:
定義一個具有適當的iterator_category標記的迭代器類,例如input_iterator_tag、output_iterator_tag、forward_iterator_tag、bidirect_tager、output_iterator_tag、forward_iterator_tag、bidirect_tagerator、標籤_iterator_tag、bidirect_標籤。
提供用於比較的成員函數(= =, !=), 遞增/遞減 ( , --), 算術 ( , -) 和解引用 (*, ->) 運算。
提供一個嵌套在迭代器類中的 const_iterator 類,允許對常數容器進行迭代。
定義與非常量迭代器相同的成員函數,但使用常數引用
實現比較運算子(==、!=、、= ) 為容器本身。
提供一個引用另一個容器的賦值運算子container.
- 容量和存取:
- 包含成員函數,如empty()、size()、max_size()來管理容器大小
提供begin(), end(), cbegin(), cend(), rbegin(), rend(), crbegin() 和 crend() 用於存取表示容器元素的迭代器。
定義 front()、back()、at() 和 operator[] 等函數來存取或修改元素。
實作emplace_front()、emplace_back()、push_front()、push_back()、pop_front()與pop_back()、push_front()、push_back()、pop_front()與pop_back ()用於元素插入和刪除。
提供emplace()、insert()和erase()成員用於插入和刪除元素的函數容器。
- 其他:
- 包含一個 swap() 成員函數,用於交換相同類型的兩個容器的內容。
實作 get_allocator() 來擷取與容器關聯的分配器。
定義一個獨立的 swap()用來交換相同型別容器的函式。
測試:
- 為了確保容器的可靠性,請使用像提供的測試器類別這樣的測試類別驗證:
-
- 物件生命週期已正確管理。
函數呼叫不會修改物件的狀態出乎意料。
在使用或不使用全域物件建立時,容器都能正常運作。