为什么不能将矢量中元素的地址推回<bool>矢量<bool*>?
why cannot push back address of element in vector<bool> to vector<bool*>?
#include <sstream>
#include <vector>
using namespace std;
bool myfunc(bool* i,bool* j){
return *i<*j;
}
int main(){
vector<bool> a;
a.push_back(true);
a.push_back(false);
a.push_back(false);
a.push_back(true);
a.push_back(true);
vector<bool*> aa;
for(int i=0;i<a.size();i++){
aa.push_back(&a[i]);
}
sort(aa.begin(),aa.end(),myfunc);
for(int i=0;i<aa.size();i++){
printf("%dn",*(aa[i]));
}
return 0;
}
但它不能编译并说:
no viable conversion from '__bit_iterator<std::__1::vector<bool, std::__1::allocator<bool> >, false>' to 'const value_type' (aka 'bool *const')
aa.push_back(&a[i]);
但我不敢相信它有错误的逻辑代码,因为我记得我可以用int做一些类似的工作,所以我尝试将一些bool转换为integer:
#include <sstream>
#include <vector>
using namespace std;
int myfunc(int* i,int* j){
return *i<*j;
}
int main(){
vector<int> a;
a.push_back(true);
a.push_back(false);
a.push_back(false);
a.push_back(true);
a.push_back(true);
vector<int*> aa;
for(int i=0;i<a.size();i++){
aa.push_back(&a[i]);
}
sort(aa.begin(),aa.end(),myfunc);
for(int i=0;i<aa.size();i++){
printf("%dn",*(aa[i]));
}
return 0;
}
但这次它可以编译并运行:
0
0
1
1
1
为什么?
因为向量<bool>是特殊的,并且可能比布尔值的常规数组更紧密地封装位。因此,您无法获得一个普通指针或对其内部布尔值的引用。
相关文章:
- 写入向量<向量<bool>>
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 让bool方法返回其他整数
- 如何在 std::vector 中找到<bool>哪些索引是真的?
- Arduino-C++ bool 不会从 false 变为 true
- 为什么在这种情况下,bool 类型的输出等于 0?
- 显式 std::exception_ptr 转换为 bool 不存在.VS2010 错误?
- 错误:不能使用"显式"说明符声明 bool'
- 为什么 C++ 11 在 ios 类中添加了运算符 bool
- 从标准::字符串到标准::矢量<bool>的快速转换
- 为什么 bool 和 _Bool 如果它们在内存中占用 1 个字节,它们只能存储 0 或 1
- 通过 mpi 发送 c++ 标准::矢量<bool>
- 为什么使用Pool和Bool而不是int8_t或char
- 如何为地图< map<int,int> 、bool > 分配值?
- 为什么更改包含 psapi.h 的顺序会产生编译错误?(标识符 BOOL 未定义)
- 使用 bool 和 const char 重载的 C++ 函数会在没有警告的情况下产生歧义 (MSVC2012)
- 返回 bool 作为 CPP 中 bool 运算符 [] 中的值