I think the documentation for adjacent_filtered's postcondition, ie:
For all adjacent elements [x,y] in the returned range, bi_pred(x,y) is true.
…isn't quite right. For example, this:
#include <boost/range/adaptor/adjacent_filtered.hpp>
#include <iostream>
#include <vector>
int main() {
const std::vector<int> a = { 0, 1, 2, 3, 4, 5, 6 };
const auto b = a | boost::adaptors::adjacent_filtered(
[] (const int &x, const int &y) {
return ( y % 2 == 1 ) && ( y == x + 1 );
}
);
for (const auto &x : b) {
std::cerr << x << "\n";
}
}
…outputs:
0
1
3
5
Yet two of the pairs of adjacent elements [x,y] in this range fail bi_pred(x,y) (because they differ by 2, not 1).
I think it's more like: bi_pred is true on each element in the returned range preceded by the element that preceded it in the original range (not in the returned range).
I think the documentation for
adjacent_filtered
's postcondition, ie:…isn't quite right. For example, this:
…outputs:
Yet two of the pairs of adjacent elements
[x,y]
in this range failbi_pred(x,y)
(because they differ by 2, not 1).I think it's more like:
bi_pred
is true on each element in the returned range preceded by the element that preceded it in the original range (not in the returned range).