3

虽然 C++ 标准库是非常通用且高效的库,但其接口的一些次要细节似乎令人失望。

  • 算法不能直接使用容器。std::sort(myvec.begin(), myvec.end());而不是std::sort(myvec);(我真的不明白为什么从一开始就没有提供第二种形式)

  • 大多数采用字符串的函数成员都const char *需要const std::string&。(C++ 字符串是std::string,至少应该有一个重载)

据我所知,这两个小缺陷应该在c++0x标准中得到纠正。

你能看到其他这些小缺陷吗?
为什么你认为这是一个缺陷?
有一天会改正吗?

(当然这里的辩论不是支持或反对泛型编程,实际上也不是关于一般设计问题。只是缺少重载,缺少算法版本,不方便的接口......)

4

2 回答 2

4
  • 算法不能直接使用容器。std::sort(myvec.begin(), myvec.end()); 而不是 std::sort(myvec);

这实际上是一个特性(它允许循环遍历 C 数组),尽管正如 GMan 在评论中所说,它可以改进。

  • 大多数采用字符串的函数成员需要 const char * 而不是 const std::string&

这是完全错误的,因为大多数 STL 函数不是成员,它们中的大多数不是函数,而是函数模板,而且(几乎?)它们都不是专门处理字符串。
(您可能在谈论文件流,它是标准库的一部分,但不是源自 STL 的标准库的那部分。当然,它们之所以被采用是有原因的const char*,尽管这,也可以改进。)

所以看起来,就像许多批评 STL 的人一样,你对它的了解还不够,无法做到这一点。这并不意味着没有什么可批评的。但是,就像在其他领域一样,在你去做这件事之前,你至少应该知道事情为什么会这样。

于 2010-11-06T21:32:23.563 回答
-6

关于诸如 之类的算法sort,只需根据需要定义包装器即可。

如果您不喜欢定义单独的包装器,请定义一个宏

#define ALL_OF( container ) startOf( container ), endOf( container )

使用合适startOfendOf函数模板,这对原始数组和标准库容器都很有效。

即你的第一个问题不是问题。

关于const char*论点,它们通常不是问题string const&。但是,如果标准库有一个标准的低开销字符串载体并被使用,那就太好了。一个真正的问题是,文件流构造函数不支持宽字符串(Windows 代码必须使用非标准扩展):这是一个正确的程序,对于执行环境,不能用标准 C++ 表示仅使用标准库。

当然,对于main. 来说也是如此,这是一个跨越核心语言和库的问题。

于 2010-11-06T21:33:47.410 回答