gpt4 book ai didi

c++ - cplusplus.com 给出了哪些错误、误解或不好的建议?

转载 作者:IT老高 更新时间:2023-10-28 11:28:09 26 4
gpt4 key购买 nike

C++ 标准库有多个引用资料,包括宝贵的 ISO 标准 MSDN , IBM , cppreference , 和 cplusplus .就个人而言,在编写 C++ 时,我需要一个具有快速随机访问、短加载时间和使用示例的引用,而且我发现 cplusplus.com 非常有用。但是,我在 SO 上经常听到关于该网站的负面意见,所以我想具体说明一下:

cplusplus.com 给出了哪些错误、误解或不好的建议?使用它来做出编码决策有哪些风险?

我希望能够在这里用准确的标准引用来回答关于 SO 的问题,因此我想发布立即可用的链接,如果不是因为这个问题,cplusplus.com 将是我的选择网站。

最佳答案

编辑: 自编写此答案以来,std::remove 的文档已得到修复。 list::remove 也是如此。

让我举个例子来告诉你 cpluscplus.com 是怎么弄错的。

考虑 std::remove 中的 <algorithm> 函数。

事实是 std::remove 不会从容器中删除项目。这是因为 std::remove 仅与一对迭代器一起工作,并且对实际包含项目的容器一无所知。事实上,std::remove 不可能知道底层容器,因为它无法从一对迭代器中发现迭代器所属的容器。所以 std::remove 并没有真正删除项目,只是因为它不能实际上从容器中删除项目的唯一方法是调用该容器上的成员函数。

因此,如果您想删除项目,请使用 Erase-Remove Idiom :

 v.erase(std::remove(v.begin(), v.end(), 10), v.end()); 

但是 cplusplus.com 给出了关于 std::remove不正确信息。 It says

Notice that this function does not alter the elements past the new end, which keep their old values and are still accessible.

这是不正确的。 [new_end, old_end) 范围内的迭代器仍然是可解引用的,但这并不意味着它们保留旧值并且仍然可以访问。 它们是未指定的。


同样,cplusplus.com 也提供了关于 list::remove不正确信息。 It says ,

Notice that a global algorithm function, remove, exists with a similar behavior but operating between two iterators.

这是完全错误的。全局删除即 std::removelist::remove 不同,因为我们看到前者并没有真正删除容器中的项目因为它不能,而后者(成员功能)确实删除项目因为它可以

这个答案是从我在以下主题中的另一个答案中复制而来的,几乎没有修改:

注意:由于最近在回复上述话题时遇到了这个问题,所以我记住了。在过去的两年里,我遇到了很多错误,我不记得了。以后有机会再补充一些吧。

关于c++ - cplusplus.com 给出了哪些错误、误解或不好的建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6520052/

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