5
为什么所有<algorithm>函数仅采用范围,而不采用容器?
中有许多有用的功能<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设计选择背后的原因。