繁体   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