繁体   English   中英

std::deque 是否是连续的 memory 容器?

[英]std::deque is contiguous memory container or not?

std::deque 是否是连续的 memory 容器?

Scott Meyers 的著名著作 Effective STL 如下所示

连续内存容器(也称为基于数组的容器)将其元素存储在一个或多个(动态分配的)memory 块中,每个块包含多个容器元素。如果插入新元素或删除现有元素,同一个 memory 块中的其他元素必须向上或向下移动以为新元素腾出空间或填充以前被擦除元素占用的空间。这种移动会影响性能(参见第 5 项和第 14 项)和异常安全(我们很快就会看到)。标准的连续内存容器是 vector、string 和 deque。非标准的 rope 也是连续内存容器。

但是您可以在 cppreference.com 中找到相反的解释

与 std::vector 不同,deque 的元素不是连续存储的:典型的实现使用一系列单独分配的固定大小 arrays,并进行额外的簿记,这意味着与 vector 相比,对 deque 的索引访问必须执行两次指针解引用仅执行一次的索引访问。

哪一个是真的?

两个引号之间没有冲突。 Scott 使用术语“连续容器”的意义比您在其他地方看到的要宽泛一些。

斯科特写道(强调我的):

连续内存容器(也称为基于数组的容器)将它们的元素存储在一个或多个(动态分配的)memory 块中,[...]

正如 cppref 中的引用所述, std::deque使用多个 arrays 来存储元素。 在每个数组中,元素是连续的。 Scott 并未声称std::deque中的所有元素在 memory 的一个块中都是连续的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM