#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("%d\n",*(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转换为整数:
#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("%d\n",*(aa[i]));
}
return 0;
}
但这次它可以编译并运行:
0
0
1
1
1
为什么?