如何从vector中读取布尔值,解决循环中!=运算符不匹配报错问题
错误原因
- 循环变量
it类型声明错误:Verification.begin()返回的是vector<bool>::iterator迭代器类型,不能直接赋值给int类型的变量,两类变量无法用!=运算符做比较,这是报错的直接原因。 - 取值逻辑错误:迭代器是指向容器元素的访问中介,必须经过解引用操作
*it才能拿到容器内存储的bool值,直接用迭代器和bool值做相等判断逻辑也不成立。
可行解决方法
方法1:使用迭代器标准写法
修正类型声明和解引用逻辑即可,代码如下:
#include <iostream> #include <vector> using namespace std; int main() { vector<bool> Verification; Verification.push_back(true); Verification.push_back(false); Verification.push_back(true); Verification.push_back(false); Verification.push_back(true); for (vector<bool>::iterator it = Verification.begin(); it != Verification.end(); it++) { if (*it) { cout << "true "; } else { cout << "false "; } } return 0; }
如果使用C++11及以上版本,还可以用auto简化迭代器类型声明:
for (auto it = Verification.begin(); it != Verification.end(); it++) { // 内部逻辑和上面一致 }
方法2:使用范围for循环(C++11及以上推荐)
不需要手动处理迭代器,写法更简洁:
for (bool val : Verification) { if (val) { cout << "true "; } else { cout << "false "; } }
方法3:下标遍历
适合需要同时获取元素索引的场景:
for (int i = 0; i < Verification.size(); i++) { if (Verification[i]) { cout << "true "; } else { cout << "false "; } }
内容的提问来源于stack exchange,提问作者Omar
相关产品推荐
相关产品推荐

