STL accumulate()函数

时间:2014-04-22 16:03:55

标签: c++ stl

如何计算满足lower_bound(42),upper_bound(137)的元素数量 从这段代码??

accumulate(values.lower_bound(42), values.upper_bound(137), 0);

2 个答案:

答案 0 :(得分:7)

accumulate不计算,累积。你当然可以积累1而不是元素,但这是相反的。直接答案是std::distance,它给出了两个迭代器之间的元素数量(即在你指定的下限和上限之间):

auto result = std::distance(values.lower_bound(42), values.upper_bound(137));

答案 1 :(得分:3)

我认为您正在寻找的解决方案是std::count_if标题中的algorithm。如果你有一个容器cont,你可以像这样使用它:

bool is_in_range(int x){
   return 42 <= x && x >= 137;
}

std::count_if(cont.begin(), cont.end(), is_in_range);