我注意到std::vector
中的emplace_back
改變了以前向量元素的地址。爲什麼?'std :: vector`中的`emplace_back`如何工作?
1
A
回答
2
從後備存儲的角度來看你是push
還是emplace
並不重要。爭論的區別在於。
因此,通常的重定位機制已到位。當目前分配的連續存儲耗盡時,它們將移動元素。
迭代器失效的規則保持不變。在http://en.cppreference.com/w/cpp/container/vector上籤出「迭代器失效」。
0
不幸的是,這是標準的:如果新的size()大於capacity(),那麼所有的迭代器和引用都是無效的。
0
如果該矢量的後備存儲的當前容量不能容納一個新元素,則必須分配一個新的較大的後臺存儲,將所有現有元素移動到該元素,然後可以構建新元素。
使用emplace_back()
不會改變後備存儲必須足夠大以適應新元素的事實。
相關問題
- 1. emplace_back on std :: vector
- 2. 其中std :: vector :: emplace_back比std :: vector :: push_back慢的示例?
- 3. C++ std :: vector如何工作?
- 4. std :: vector <> :: emplace_back()安全嗎?
- 5. C++ vector emplace_back更快嗎?
- 6. C++ std :: vector作爲std :: function的參數
- 7. std :: vector <std :: vector <T>> vs std :: vector <T*>
- 8. 如何縮小std :: vector?
- 9. 如何從std :: vector <>
- 10. 如何縮短std :: vector?
- 11. 如何導出std :: vector
- 12. std :: vector :: swap如何實現?
- 13. std :: vector vs std :: insert
- 14. 爲什麼默認的構造函數不適用於`vector :: emplace_back`
- 15. iterate std :: vector <std :: vector <char>>?
- 16. std :: unique_locks的std :: vector向量
- 17. 爲什麼複製構造函數在調用std :: vector :: emplace_back()時調用?
- 18. 如何從std :: vector中恢復內存?
- 19. 如何到達2d std :: vector的第N個元素(`std :: vector <std :: vector <T>>`)?
- 20. Vector map()如何在actionscript 3中工作?
- 21. C++ - 如何將std :: priority_queue中的元素複製到std :: vector
- 22. 如何訪問std :: vector迭代器中的std :: map屬性?
- 23. 手動中毒的std :: vector
- 24. std :: vector中的高效push_back
- 25. 如何通過不同的std :: vector的值對std :: vector進行排序?
- 26. STD是如何工作的?
- 27. 徵和std :: vector的
- 28. 使用std :: vector的
- 29. NSMutableArray to std :: vector
- 30. static const std :: vector