2.1 C++ - invalid operands to binary expression
demo:里面如果是vector不会报错,但是list就会编译报错
std::vector<int> vector{12, 0, 23, 1, 4, 0, 34, 0, 2, 9};
auto rit = std::find(vector.crbegin(), vector.crend(), 0);
std::cout << "The last " << *rit << " in vector is at position "
<< rit.base() - vector.begin() - 1 << std::endl;
原因:总的来说迭代器有以下几种:
| input iterator | == != ++ *(only on rhs) -> single-pass |
|---|---|
| output iterator | ++ *(only on lhs) single-pass |
| forward iterator | input&output iterator operations multi-pass |
| bidirectional iterator | forward iterator operations -- |
| random-access iterator | bidirectional iterator operations < <= > >= + += -(iter-integral, iter-iter) -= [] |
list 的迭代器是 bidirectional iterator,支持 ++,-- 这种运算,不支持 +,-,+=,-= 这种运算,而 vector 的迭代器是 random-access iterator,可以支持。