【发布时间】:2010-05-18 11:11:09
【问题描述】:
我开始使用 stl 容器,因为当我需要列表、集合和映射的功能并且在我的编程环境中没有其他可用的功能时,它们非常方便。我不太关心它背后的想法。 STL 文档在涉及函数等方面都很有趣。然后我跳过阅读,直接使用容器。
但昨天,我的假期仍然很放松,我只是试了一下,想多走一点 stl 方式。所以我用了transform函数(能不能给我点个掌声,谢谢)。
从学术角度来看,它看起来真的很有趣,而且很有效。但困扰我的是,如果你加强对这些函数的使用,你需要数千个帮助类来处理你想要在代码中做的大部分事情。程序的整个逻辑被切成小块。这种切片不是良好的编码习惯的结果;这只是技术需求。有些东西,这让我的生活可能更难而不是更容易。
我学到了一个艰难的方法,即您应该始终选择解决手头问题的最简单方法。例如,我看不到 for_each 函数为我做了什么,这证明了在正常循环内的几行简单代码上使用辅助类是合理的,这样每个人都可以看到发生了什么。
我想知道,您对我的担忧有何看法?当您开始以这种方式工作时,您是否像我一样看到它,并且在您习惯它时改变了主意?有没有我忽略的好处?还是你只是像我一样忽略这些东西(并且可能会继续这样做)。
谢谢。
PS:我知道 boost 中有一个真正的 for_each 循环。但我在这里忽略了它,因为我猜这对于我通常使用迭代器的循环来说只是一种方便的方式。
【问题讨论】:
-
std::mem_fun和类似的帮助,但这是关于 C++ IMO 的痛苦事情之一。 C++0x lambdas 将对此有所帮助。当您尝试使用std::bind1st和组合之类的东西时,情况会变得更糟。 -
我不认为 BOOST_FOR_EACH 只是为了方便。它比您通常的循环更简洁,更具表现力。这是一个真正的改进。我认为 lambdas 将使 STL 的使用更加容易,并将其提升到应有的水平。