为什么stl中的每个集合类型都没有for_each成员函数?

Ben*_*hoo 5 c++ foreach standards stl

例如:

v.for_each([](int i) { printf("%d\n", i); }); 
Run Code Online (Sandbox Code Playgroud)

如果比常用的更优雅和可读:

std::for_each(v.begin(), v.end(), [](int i) { printf("%d\n", i); });
Run Code Online (Sandbox Code Playgroud)

标准中是否缺少这样的成员函数的正当理由?

Ker*_* SB 8

这是整个库的标准设计原理:将容器与算法分开.

如果按照自己的方式进行操作,则必须为每个容器Y实现每个功能X,如果您有M个功能和N个容器,则可以使用M*N实现.

通过使用迭代器和make算法处理迭代器而不是容器,您只需要实现M算法和N迭代器接口.

这种分离也意味着您拥有无限广泛的应用范围:算法不仅可以用于每个库容器,而且可以用于任何容器,无论是现在还是将来,任何人都决定编写并配备迭代器.有限与无限重用是一个非常有力的论据!通过通用的免费接口调用算法不会增加任何成本.

  • @DeadMG:但是一个super-mixin如何知道过去,现在和未来的所有算法?它如何扩展并提供与迭代器和算法相同的无限扩展性?算法和容器都可以来自许多不同的,不相关的来源. (2认同)