虽然C++标准库是非常通用和高效的库,但它们的接口的一些次要细节似乎令人失望。
std::sort(myvec.begin(), myvec.end());而不是std::sort(myvec); (我不认为第二个表单是从接受字符串的函数成员std::sort(myvec);中提供的,而是const std::string& )。(C++字符串是std::string,至少应该有重载)据我所知,这两个小缺陷应该在c++0x标准中得到纠正。
你能看到这些小缺陷中的其他缺陷吗?
你为什么认为这是个缺陷?
有一天它会被纠正吗?
(当然,这里的辩论不是赞成还是反对通用程序设计,实际上也不是关于一般设计问题。只是缺少重载,缺少算法版本,界面不方便.)
发布于 2010-11-06 21:32:23
这个特性实际上是一个特性(它允许在C数组上循环),尽管,正如GMan在一条注释中所说的,它可以得到改进。
大多数接受字符串的函数成员都需要const char *而不是const std::string&
这是完全错误的,因为大多数STL函数不是成员,大多数不是函数,而是函数模板,和(几乎?)他们中没有一个专门处理字符串。
(您可能谈论的是文件流,它是标准库的一部分,而不是来自STL的标准库的一部分。当然,他们服用const char*是有原因的,尽管这也是可以改进的。)
所以,就像很多批评STL的人一样,你对它的了解还不足以做到这一点。这并不意味着没有什么可批评的。但是,和其他领域一样,在你去做这件事之前,你至少应该知道为什么事情是这样的。
发布于 2010-11-06 21:33:47
对于像sort这样的算法,只需定义包装器就可以了。
如果您不喜欢定义单个包装器,那么就定义一个宏
#define ALL_OF( container ) startOf( container ), endOf( container )有了合适的startOf和endOf函数模板,这对于原始数组和标准库容器都能很好地工作。
也就是说,你的第一个问题不是问题。
关于const char*参数,通常它们不是string const&并不是一个问题。但是,如果标准库有一个标准的低开销字符串载波并使用它,那就太好了。例如,文件流构造函数(Windows代码必须使用非标准扩展)不支持宽字符串是一个真正的问题:对于执行环境,正确的程序不能仅使用标准库在标准C++中表示。
当然,main也是如此,这是一个跨核心语言和库的问题。
https://stackoverflow.com/questions/4115234
复制相似问题