为什么迭代bool的向量(w /修改元素)需要&&,而不是int的向量?
// junk10.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <algorithm>
#include <array>
#include <vector>
using namespace std;
int main()
{
vector<int> miv{ 1, 2, 3 };
for (auto &e : miv) { e = 15; } // Legal
vector<bool> mbv{ false };
for (auto &e : mbv) { e = true; } // Illegal
for (auto &&e : mbv) { e = true; } // Legal
return 0;
}
答案 0 :(得分:0)
实现std::vector<bool>
的方式是,对于空间效率,每个布尔值占用 1位而不是 1个字节,作为布尔值。
这意味着您无法参考它。引用是一个包装指针,你不能指向一个指针。
您可以在C ++ 11中使用auto &&
来修改该位,但请注意auto
不会成为布尔值:
std::vector<bool> vec { 1, 0, 1 };
bool &&i = vec[1];
i = 1; // DOES NOT MODIFY VECTOR
auto &&k = vec[2];
k = 0; // MODIFIES VECTOR
for (bool i : vec)
std::cout << i;
100