C++ 笔记

163 阅读1分钟

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 iteratorinput&output iterator operations multi-pass
bidirectional iteratorforward iterator operations --
random-access iteratorbidirectional iterator operations < <= > >= + += -(iter-integral, iter-iter) -= []

list 的迭代器是 bidirectional iterator,支持 ++,-- 这种运算,不支持 +,-,+=,-= 这种运算,而 vector 的迭代器是 random-access iterator,可以支持。