c++ - 如何在布尔元素向量上使用 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);
解决方案
由于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(...)
并让编译器找出正确的类型。
推荐阅读
- visual-studio-code - VSCode - 如何重新加载所有窗口
- docker - 从 Azure 管道内的 Docker 任务中检索图像摘要值
- django - 从 postgresql 数据库中提取所有字段的数据并在 django 中创建一个包含一些新字段的新模型
- c# - .Net 核心 - 停止服务/用户管理器被处置/保持服务活动
- reactjs - 如何在反应中将多个值传递给我的函数?
- scala - 如何在scala中读取CSV文件
- server - 原生移动应用的 OAuth 2.0 授权码授权 + PKCE
- javascript - 如何在 HTML 和 Javascript 的动态列表中显示格式化的 HTML 文本
- javascript - 如何在打字稿中实现具有多个匿名函数的接口
- javascript - Chart.js 图表不显示(引导程序)