cin到bools的矢量

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)

为什么我不能这样做?编译器不会编译它,但我在向量中有其他变量类型,它可以正常工作.这有什么问题?

Ben*_*igt 9

这是因为它std::vector<bool>是一种专业化,并且根本不像矢量.这被广泛认为是该标准的一个主要缺陷.

为了节省内存,vector<bool>将每个元素存储为单个位.但是位不是可单独寻址的,因此operator[]不能返回bool&连接到位的引用.相反,它返回vector<bool>::reference...并且cin不提供函数重载来处理这个问题.

(juanchopanza正确地指出你的向量没有元素为零.但即使它通过resize或其他机制做,但是operator[]不返回引用的事实仍然会妨碍.)