首页
学习
活动
专区
圈层
工具
发布

STL缺陷
EN

Stack Overflow用户
提问于 2010-11-06 21:22:31
回答 2查看 596关注 0票数 3

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

  • 算法不能直接接收容器。beginning)
  • Most of std::sort(myvec.begin(), myvec.end());而不是std::sort(myvec); (我不认为第二个表单是从接受字符串的函数成员std::sort(myvec);中提供的,而是const std::string& )。(C++字符串是std::string,至少应该有重载)

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

你能看到这些小缺陷中的其他缺陷吗?

你为什么认为这是个缺陷?

有一天它会被纠正吗?

(当然,这里的辩论不是赞成还是反对通用程序设计,实际上也不是关于一般设计问题。只是缺少重载,缺少算法版本,界面不方便.)

EN

回答 2

Stack Overflow用户

发布于 2010-11-06 21:32:23

  • 算法不能直接接收容器。:排序(myvec.begin(),myvec.end());而不是myvec.begin()

这个特性实际上是一个特性(它允许在C数组上循环),尽管,正如GMan在一条注释中所说的,它可以得到改进。

大多数接受字符串的函数成员都需要const char *而不是const std::string&

这是完全错误的,因为大多数STL函数不是成员,大多数不是函数,而是函数模板,和(几乎?)他们中没有一个专门处理字符串。

(您可能谈论的是文件流,它是标准库的一部分,而不是来自STL的标准库的一部分。当然,他们服用const char*是有原因的,尽管这也是可以改进的。)

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

票数 4
EN

Stack Overflow用户

发布于 2010-11-06 21:33:47

对于像sort这样的算法,只需定义包装器就可以了。

如果您不喜欢定义单个包装器,那么就定义一个宏

代码语言:javascript
复制
#define ALL_OF( container ) startOf( container ), endOf( container )

有了合适的startOfendOf函数模板,这对于原始数组和标准库容器都能很好地工作。

也就是说,你的第一个问题不是问题。

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

当然,main也是如此,这是一个跨核心语言和库的问题。

票数 -6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4115234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档