首页 > 解决方案 > 如何在布尔元素向量上使用 std::find 算法

问题描述

std::_Bit_const_iterator尝试在std::vector<bool>using中查找元素时出现此错误std::find。有人可以解释我做错了什么。

#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>


int32_t main(int32_t argc, char* argv[]) {
    std::vector<std::vector<bool>> bin_mat;
    bin_mat = { { true, false, false },
                { false, false, true },
                { true, false, false }
              };
      
    for(const auto& row : bin_mat) {
        const std::vector<bool>::iterator row_itr = std::find(row.begin(), row.end(), true);
        std::size_t column_index = std::distance(row_itr, row.begin());
        
        std::cout << column_index << std::endl;
    }
    
    return EXIT_SUCCESS;
}

这是我得到的错误conversion from ‘std::_Bit_const_iterator’ to non-scalar type ‘const iterator {aka const std::_Bit_iterator}’ requested const std::vector<bool>::iterator row_itr = std::find(row.begin(), row.end(), true);

标签: c++

解决方案


由于row是 a const std::vector<bool>, 的返回值std::find是 类型std::vector<bool>::const_iterator,并且不能转换为std::vector<bool>::iterator

请注意,const iterator这与const_iterator- 前者意味着迭代器本身不能改变(例如不能指向不同的元素)。后者意味着不能通过此迭代器更改指向的元素。

只需制作它auto row_itr = std::find(...)并让编译器找出正确的类型。


推荐阅读