【发布时间】:2015-09-07 09:26:27
【问题描述】:
#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
为什么?
【问题讨论】:
-
&a[i]给出错误“无法获取临时地址”。我不确定为什么你的编译器没有给出那个错误。 -
@0x499602D2:该错误消息看起来对应于
push_back(a[i])(没有&) -
@BenVoigt
vector<bool>::operator[]返回类类型的纯右值。 coliru.stacked-crooked.com/a/9302a6ba73fcef6c -
@0x499602D2 我的意思是问题中的错误信息
-
@BenVoigt 对,他可能删除了
&并复制粘贴了旧代码。
标签: c++ pointers vector boolean