元素' std :: vector和std :: deque中的连续存储位置

时间:2014-06-22 14:21:37

标签: c++ vector deque

“元素”连续存储位置“对std::vectorstd::deque的意义是什么?根据{{​​3}},保证std::vector(并且std::deque不是)将元素存储在连续的存储位置。但是我怎么能在代码中看到它呢?两者都有一个随机访问迭代器,因此在这两种情况下我们都可以为随机容器的引用添加一些随机偏移量,所有都应该没问题,对吗?

2 个答案:

答案 0 :(得分:3)

你可以通过使用vector :: data()看到它,它返回一个指向你的连续数据的指针( http://www.cplusplus.com/reference/vector/vector/data/)。

然后,您可以使用基于指针的元素访问(尽管使用标准容器操作更加安全和可操作),例如,如果您想使用需要指针的函数,或者如果您使用认为它可以利用绩效。

此成员函数也存在于数组和字符串中,因为它们也具有连续的元素。

对于不保证连续性的容器,例如deque,list或stacks,此成员不存在。

答案 1 :(得分:1)

您关心的原因是此实现细节对性能产生巨大影响。您不需要通过尝试使用指针访问元素来证明它,因为您可以依靠它。一个talk at Build 2014(如果你不能观察整个事情,跳到大约35分钟)就会显示出这种内存布局导致矢量对其他数据结构的惊人性能提升。

由于C ++是标准化的,包括库和语言,你可以确定vector总是会为其元素使用连续的内存,并且你可以依靠你将获得的速度提升。这就是为什么vector应始终是您容器的首选。