在線檢查文檔我看到它是通過引用傳遞的。有人可以確認堆棧實際上是複製數據嗎?推送到STL堆棧是通過引用傳遞的,但堆棧是否創建了值的副本?
1
A
回答
7
是的,it does copy the element you give it。在C++ 11中,如果你給它一個臨時的或者std::move
的話,它也可以移動它。
請注意,C++ 11還提供emplace
,它直接在給定的構造函數參數中構造值。
1
這取決於。該值被複制,但可能無法按您的想法工作。如果您推動一個指針,如char*
,它將只複製指針值,而不是整個字符串。如果您正在推送一個簡單的int
或CustomObject
而不是指針,它將被複制。
1
參數stack
適配器本身是參考,但請記住,stack
只是一個適配器 - 其push
立即調用push_back
,傳遞相同的參數。然而,這個調用通過值來傳遞參數。
因此,您傳遞的參數會被複制 - 通過引用傳遞給std::stack
意味着它只被複製一次。如果這是一次價值傳遞,那麼它將被複制兩次(目前忽略編譯器將拷貝刪除,幾乎肯定會這樣)。
相關問題
- 1. 是否可以通過引用來傳遞堆棧中的某些內容?
- 2. 堆棧上的所有值是否小於傳遞的值?
- 3. 瞭解Haskell的`map` - 堆棧還是堆?
- 4. cin是堆棧還是堆棧?
- 5. 通過堆棧
- 6. 通過堆棧傳遞數據
- 7. 「堆棧」是什麼意思,而不是在推/彈出,但在「軟件堆棧」
- 8. 是否可以添加一些堆棧到一個大堆棧?
- 9. 堆棧推送和流行
- 10. 如何溢出堆棧而不推送新的堆棧幀?
- 11. 碼頭堆棧羣 - 服務副本沒有傳播到Mutli服務堆棧
- 12. 是否分配了ruby結構堆棧?
- 13. 全堆棧,堆棧交換等,什麼是堆棧?
- 14. 通過AJAX創建動畫'堆棧'
- 15. 創建堆棧CREATE_IN_PROGRESS
- 16. Bitnami堆棧是否有效?
- 17. 是否Zend_Db_Adapter :: beginTransaction()堆棧?
- 18. 堆上,而不是堆棧
- 19. 是堆棧或堆make_pair?
- 20. 什麼是基於堆棧的引用?
- 21. 瞭解「堆棧」
- 22. 堆棧/堆上的對象創建?
- 23. 將SKB推送到網絡堆棧
- 24. x86 - CALL指令是否總是將EIP指向的地址推送到堆棧?
- 25. 創建可模態被呈現或推送到導航堆棧
- 26. Numpy:新維矩陣的堆棧副本
- 27. XCode:是否可以創建可重用的堆棧視圖?
- 28. 創建一個通用堆棧陣列
- 29. C#7.0中引用返回的值是否存儲在堆棧或堆上?
- 30. 繞過核心數據堆棧傳遞
添加了參考鏈接,希望您不介意。 – 2012-03-27 00:51:38
@NiklasB .:你比我快30秒;) – 2012-03-27 00:52:19