ggr*_*grr 1 c++ pointers boolean vector
#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;
}
Run Code Online (Sandbox Code Playgroud)
但它不能编译并说:
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]);
Run Code Online (Sandbox Code Playgroud)
但我不敢相信它有错误的逻辑代码,因为我记得我可以用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;
}
Run Code Online (Sandbox Code Playgroud)
但这一次它可以编译和运行:
0
0
1
1
1
Run Code Online (Sandbox Code Playgroud)
为什么?
因为vector <bool>是特殊的,并且可以比常规的布尔数组更紧密地打包.因此,您无法获得正常的指针或对其中的布尔值的引用.
归档时间: |
|
查看次数: |
554 次 |
最近记录: |