中有许多有用的功能<algorithm>
,但所有功能都对“序列”(一对迭代器)起作用。例如,如果我有一个容器并且喜欢std::accumulate
在其上运行,则需要编写:
std::vector<int> myContainer = ...;
int sum = std::accumulate(myContainer.begin(), myContainer.end(), 0);
我打算做的是:
int sum = std::accumulate(myContainer, 0);
在我看来,这更具可读性和清晰度。
现在我可以看到,在某些情况下,您可能只希望对容器的某些部分进行操作,因此选择传递范围绝对对您有用。但是至少以我的经验来看,这是一种罕见的特殊情况。我通常要对整个容器进行操作。
可以很容易地编写一个包装函数,它接受一个容器,并呼吁begin()
和end()
就可以了,但是这样的便利功能,不包含在标准库。
我想知道这种STL设计选择背后的原因。
boost::accumulate