簡體   English   中英

元素在std :: vector和std :: deque中的連續存儲位置

[英]Elements' contiguous storage locations in std::vector and std::deque

對於std::vectorstd::deque ,“元素的連續存儲位置”是什么意思? 根據cplusplus.com ,可以保證std::vector (不保證std::deque )將元素存儲在連續的存儲位置中。 但是如何在代碼中看到它呢? 兩者都有一個隨機訪問迭代器,因此在兩種情況下,我們都可以向隨機容器的引用添加一些隨機偏移,並且都應該可以,對嗎?

您可以使用vector :: data()看到它,它返回一個指向連續數據的指針( http://www.cplusplus.com/reference/vector/vector/data/ )。

然后,您可以使用對元素的基於指針的訪問(盡管使用標准容器操作更安全和可取),例如,如果您要使用需要指針的函數,或者您認為可以利用性能。

該成員函數也適用於數組和字符串,因為它們也具有連續的元素。

對於不保證連續性的容器(例如雙端隊列,列表或堆棧)不存在此成員。

您之所以在意,是因為此實現細節對性能產生了巨大影響。 您無需通過嘗試使用指針訪問元素來證明這一點,因為您可以依靠它。 在Build 2014上的一次演講 (如果您看不到整個內容,則跳到35分鍾左右)顯示,由於這種內存布局,vector與其他數據結構相比,性能得到了驚人的提升。

由於C ++是標准化的(包括庫和語言),因此可以確保vector始終將連續內存用於其元素,並且可以依靠將獲得的速度提升。 這就是為什么vector始終應該是您選擇容器的首選。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM