- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
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::remove
与 list::remove
不同,因为我们看到前者并没有真正删除容器中的项目因为它不能,而后者(成员功能)确实删除项目因为它可以。
这个答案是从我在以下主题中的另一个答案中复制而来的,几乎没有修改:
注意:由于最近在回复上述话题时遇到了这个问题,所以我记住了。在过去的两年里,我遇到了很多错误,我不记得了。以后有机会再补充一些吧。
关于c++ - cplusplus.com 给出了哪些错误、误解或不好的建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6520052/
我正在尝试用 C++ 实现 bfs。为了做到这一点,我创建了一个名为 closedList 的变量,它应该保留我已经访问过的状态。然而在调试中,当我尝试使用迭代器打印关闭列表中的状态时,它说。 can
我有以下代码: int main() { string input = ""; std::vector board = create_board(); print_board(board); std:
在this page "Pointers and string literals" section网站说 const char * foo = "hello"; 当我们输出 foo 时它会返回字符串文
我正在尝试将一个 csv 文件导入到我的 C++ 程序中,但我遇到了一些问题,希望得到一些说明。 csv 文件中的数据排列如下。如您所见,我要导入 12 个单元格。 x, y, z, p 1, 2,
我是 C++ 的新手,我需要使用 STL 中的 Set,但我在这个概念上苦苦挣扎。 我有一个这样的数组 int my_data[3] 我想创建(不知道这是否可能)一个 set,其中包含 3 个整数的空
最近遇到了下面的代码,看不懂: cplusplus {{ #include "Frame_m.h"` }} cplusplus {{ }} 是什么意思? 最佳答案 OMNet++ 包含一种称为 NED
关闭。这个问题是opinion-based .它目前不接受答案。 想要改进这个问题吗? 更新问题,以便 editing this post 提供事实和引用来回答它. 关闭去年。 Improve thi
我不了解 C++ 11 中的 allocator_traits,所以我尝试了 allocator_traits exmple来自 cplusplus 网站。但是,此代码无法在 gcc 4.9、VS 2
在 Emacs v24.5.1 中使用 CPlusPlusMode,我想在键入表达式时自动创建匹配的括号和大括号。 更具体地说,当输入例如“{”时,CPlusPlusMode 应该创建匹配的括号并将光
我通读了很多“学习 C# .Net”的问题,只是想看看是否已经(直接或间接)回答了这个问题。 我主要用 C++ 编程,所以我找到了网站 http://www.cplusplus.com/无价之宝,几乎
我正在使用从 https://github.com/jrk/redis-cplusplus-client check out 的用于 Redis 的 C++ 客户端. 问题是我总是遇到 redis::
cplusplus.com 上给出了一个例子: // read a file into memory #include // std::cout #include // std:
一个简单的问题:有人知道像 cplusplus.com 这样的网站吗? (具有组织良好的函数和标题,包括示例(这对我来说非常重要))并且它是最新的(C++11)。 我问是因为我找不到任何这样的网站。在
如果你能为我澄清一些困惑,我会很高兴。我正在编写一个函数来删除字符串中的重复字符,例如"AB --> "AAABB"。 void remove_dups(std::string& str) {
我正在阅读有关 std::regex_iterator 的文档因为我正在尝试学习如何使用它来解析 HTML 标签。网站给出的例子是 #include #include #include int
我尝试编译并运行来自 http://www.cplusplus.com/reference/future/packaged_task/reset/ 的 reset() 函数示例: $ cat task
当我在 Cplusplus 包装器中使用 android NDK 调用 ffmpeg1.2.1 lib 时,某些符号无法链接,链接时出现以下错误。但是其他符号可以链接,为什么?如何纠正错误? Shar
我是一名优秀的程序员,十分优秀!