范围for配合stl容器遍历很方便,但是却有一些stl不符合使用条件。不满足条件的,在编译的时候,编译器就会显示错误。
一、使用条件
1、容器支持迭代器并且有begin和end函数
例如:队列queue不支持迭代器,无法使用范围for。
报错如下:
error: no matching function for call to 'begin(std::queue<int>&)'
error: 'class std::queue<int>' has no member named 'begin'
error: no matching function for call to 'end(std::queue<int>&)'
error: 'class std::queue<int>' has no member named 'end'
2、迭代器有 != 操作符
标准库容器的迭代器都定义了 == 和 != ,所以一般满足第一点的容器都满足第二点。
3、迭代器有前置自增操作
4、迭代器有解引用操作
3、4点一般标准库容器支持迭代器的容器都满足,故而对于标准库中的容器,只要支持迭代器都可以使用范围for