今天做题的时候搞范围循环,发现不能对 vector
数组元素引用。
报错
vector<bool> prev(26, false);
for (bool& x : prev) x = true;
[错误] 非常量引用的初始值必须是左值
这很反常识,因为其他元素的 vector
我都是用这样来操作元素的。
同时我想到之前就遇到一个问题,无法直接读入 vector<bool>
元素。
了解后发现,CPP 为了节省空间,把 vector<bool>
优化成了一个元素占一字节的畸形东西,类似可变的 bitset
。
处理
-
强行引用
-
非要引用的话可以强行用
bool &&
万能引用来搞。- 这个东西我不懂不敢乱用。
- 并且这样做虽然能修改值了,但是还是无法读入。
-
-
array<bool, 26> prev = {}
- 用封装的几乎完全类似传统数组的
std::array
来平替即可。
- 用封装的几乎完全类似传统数组的