gpt4 book ai didi

c++ - 在标准容器中实现尺寸

转载 作者:太空宇宙 更新时间:2023-11-04 15:51:43 25 4
gpt4 key购买 nike

这是一个纯粹的理论问题,我知道标准容器接口(interface)现在不太可能改变......

我最近读到 Herb Sutter 的一位“本周大师”,他在其中提示 empty() 在 std::string 中作为成员函数实现的事实。我不同意所有论点,因为例如std::list 需要相同函数的不同实现,因为 size() 是 O(n) 而 empty() 显然是O(1).

但是,标准指定(例如)std::string 的 empty() 成员函数实现为 "size () == 0"是有原因的吗 而不是 "begin () == end ()" ?

在我看来,后者允许对所有容器使用相同的 O(1) 实现 empty() 函数,我想不出有什么缺点。效率低吗?

谢谢,

NG

最佳答案

标准没有指定确切库中的任何内容是如何实现的。它只是指定某事的含义。因此,如果 empty() 为真,则 size() 也必须为 0。这并不意味着 empty() 必须 实际上调用std::basic_string::size() 并将其与 0 进行比较。规范只是说如果 empty() 返回 true,则调用 size() 之后立即返回 0,如果 empty() 返回 false,则紧接着调用 size() 返回 0 .

规范可以说它的 begin() 将等于它的 end(),并且它不会强制改变任何实现。

这种不一致很可能是由于 std::basic_string 类在 C++98 的开发过程中来自与其他 STL 容器不同的地方。这就是为什么它有这么多成员函数来做 STL 容器通常会用算法做的事情。

关于c++ - 在标准容器中实现尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7144982/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com