首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么遍历bool的向量需要&&,而不需要int的向量?

为什么遍历bool的向量需要&&,而不需要int的向量?
EN

Stack Overflow用户
提问于 2018-05-08 10:55:40
回答 1查看 222关注 0票数 1

为什么遍历bool的向量( w/修改元素)需要&&,而不是int的向量?

代码语言:javascript
复制
// 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;
}
EN

回答 1

Stack Overflow用户

发布于 2018-05-08 11:22:27

实现std::vector<bool>的方式是为了提高空间效率,每个布尔值占用1位,而不是布尔值1字节

这意味着你不能引用它。引用是一个包装的指针,你不能有一个指向一个位的指针。

您可以使用C++ 11中的auto &&修改该位,但请注意,auto不会变成布尔值:

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50225114

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档