<分区>
虽然 C++ 标准库是非常通用和高效的库,但它们接口(interface)的一些小细节似乎令人失望。
算法不能直接使用容器。 std::sort(myvec.begin(), myvec.end());
而不是 std::sort(myvec);
(我真的没有看到有效为什么不从一开始就提供第二种形式)
大多数接受字符串的函数成员需要 const char *
而不是 const std::string&
。 (C++字符串是std::string
,至少应该有重载)
据我所知,这两个小缺陷应该在 c++0x
标准中得到纠正。
你能看出其他这些小缺陷吗?
您为什么认为这是一个缺陷?
有一天会被纠正吗?
(当然,这里的争论不是支持或反对泛型编程,实际上也不是关于一般设计问题。只是缺少重载、缺少算法版本、不方便的接口(interface)……)
- Algorithms cannot take containers directly. std::sort(myvec.begin(), myvec.end()); instead of std::sort(myvec);
这实际上是一个特性(它允许在 C 数组上循环),尽管正如 GMan 在评论中所说的那样,它可以改进。
- Most of function member taking string require const char * instead const std::string&
这是完全错误的,因为大多数 STL 函数都不是成员,它们中的大多数不是函数,而是函数模板,并且(几乎?)它们都不处理字符串独家。
(您可能在谈论文件流,它是标准库的一部分,但不是源自 STL 的标准库的那部分。当然,这是有原因的它们是采用 const char*
制作的,尽管这也可以改进。)
看来,正如许多批评 STL 的人一样,您对它的了解还不够多,无法做到这一点。这并不意味着没有什么可批评的。但是,就像在其他领域一样,在你开始做这件事之前,你至少应该知道为什么事情是这样的。