MyU*_*his 3 c++ stl boolean vector
我有这个代码:
#include <iostream>
#include <vector>
using namespace std;
int main(){
vector <bool> v;
cin >> v[0];
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么我不能这样做?编译器不会编译它,但我在向量中有其他变量类型,它可以正常工作.这有什么问题?
这是因为它std::vector<bool>是一种专业化,并且根本不像矢量.这被广泛认为是该标准的一个主要缺陷.
为了节省内存,vector<bool>将每个元素存储为单个位.但是位不是可单独寻址的,因此operator[]不能返回bool&连接到位的引用.相反,它返回vector<bool>::reference...并且cin不提供函数重载来处理这个问题.
(juanchopanza正确地指出你的向量没有元素为零.但即使它通过resize或其他机制做,但是operator[]不返回引用的事实仍然会妨碍.)