我正在調查std::set
的代碼。我看到insert
簽名爲_Pairib insert(const value_type& _Val)
。爲什麼通過引用傳遞輸入參數?我知道standardcContainers將它們的元素複製到容器的內存中。有人知道這是如何實現的嗎?分配者進入圖片的位置在哪裏?任何解釋如何存儲/插入元素的小代碼/僞代碼都將被讚賞。我有興趣瞭解如何完成複製。STL容器插入元素
0
A
回答
2
分配器是一個模板參數。看看定義here:
template < class Key, class Compare = less<Key>,
class Allocator = allocator<Key> > class set;
如果不指定自己的分配器,將採取默認的分配器(這很可能只是一個new
)。
您可以在具有公共副本構造函數,析構函數和賦值運算符的類上使用STL包含器。見here:插入STL容器
元素可以是 供給公共拷貝構造,公共析構函數,和一個公共 賦值運算符的任何對象類型。析構函數不能拋出異常。 此外,關聯容器(如集合和地圖)必須定義一個 公共比較運算符,默認爲運算符<。 容器上的某些操作可能還需要公共默認構造函數和公共等價運算符。
所以基本上這個複製是通過使用你在類中實現的上述公共成員函數完成的。
2
爲什麼輸入參數作爲參考被傳遞。
如果按值取值,則需要兩個副本:一個用於函數參數,另一個用於容器節點。
分配器來自哪裏。
容器請求分配器分配和初始化通常包含元素類型的私有節點類型以及其他信息,如指向其他節點的指針。
我有興趣瞭解副本是如何完成的。
私有節點類型將保存傳遞給insert
的參數的副本。
相關問題
- 1. STL容器插入元素和內存透視
- 2. 回到STL容器元素的參考
- 3. STL容器元素銷燬順序
- 4. 使用元素鍵迭代STL容器
- 5. stl容器中的搜索元素
- 6. 向STL容器背面添加元素
- 7. STL容器移動選定的元素
- 8. 插入C++ map STL容器失敗
- 9. 插入容器底部的元素
- 10. 將元素滑入容器
- 11. 將迭代器返回到STL容器中的元素
- 12. C++ STL關聯容器:從元素獲取迭代器?
- 13. 使用std :: remove_reference獲取STL容器的元素迭代器
- 14. 插入內容到一個HTML元素
- 15. C++ STL Set:無法找到()插入的最後一個元素
- 16. 插入到STL地圖的結構元素
- 17. 如何在STL向量矩陣中插入一個元素?
- 18. 地道STL:遍歷列表並插入元素
- 19. 插入元素
- 20. C++ STL容器
- 21. 複製SDL_Surface像素爲STL容器
- 22. STL:容器的容器
- 23. 移動STL容器中的元素是否將其從該容器中移除?
- 24. STL關聯容器:清除並獲取(不可複製)元素
- 25. Eclipse CDT無法解析STL容器中元素的方法
- 26. 檢查stl容器中元素的類型 - C++
- 27. stl容器中的常量移除元素
- 28. C++ - 如何從STL容器有效的條件刪除元素?
- 29. 什麼是STL容器來執行元素之間的移除?
- 30. 列表插入STL
那麼STL調用用戶定義類型的拷貝構造函數,並創建對象到分配器創建的區域中? – Avinash
@Avinash - 是的。 – littleadv
謝謝,你知道我如何在C++中做到這一點,我的意思是我需要使用新的位置來實現這一點。 – Avinash