1
#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;
}
,但它不能編譯,並說:爲什麼不能將向量<bool>中的元素地址推回到向量<bool*>?
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]);
,但我不能相信它有邏輯錯誤的代碼,因爲我記得我能做到與詮釋一些類似的作品,所以我試圖將一些布爾整數:
#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
@ 0x499602D2:該錯誤消息看起來像對應'push_back(a [i])'(沒有'&') –
@BenVoigt'vector :: operator []'返回一個類類型的prvalue。 http://coliru.stacked-crooked.com/a/9302a6ba73fcef6c –
0x499602D2