复习C++重读名著Effective STL - item 18 vector<bool>的缺点分析

vector<bool>的确比较无脑,算是STL中的一个败笔吧。Scott Meyers是个好同志,指出了它的问题并给出了walkaround方法,具体细节同学们去看书吧。我倒是有一个问题:如果让vector<bool>成为一个好容器好公民,会怎样?现在的实现虽然不正统也不完美,但是如果有谁用了它,也不至于上吐下泻吧,可能这个就是实现者的一个出发点 - 不是为了美,而是为了实用。如果是这样,跟C++的设计初衷就吻合了。

要验证书中所说的问题很简单,几行代码就够了。

// main.cpp


#include <iostream>
#include <vector>

int main() {

    std::vector<bool> answers;
    answers.push_back(true);
    answers.push_back(true);
    answers.push_back(false);

    // This line won't compile. It will cause error like "error: no viable conversion from '__bit_iterator<std::__1::vector<bool, std::__1::allocator<bool> >, false>' to 'bool *'"
    //bool * b = &answers[0];
    //std::cout << "the answer is " << *b << std::endl;

    // But if you don't care too much about it's container or not,
    // you can still use an iterator libe below.
    auto it = &answers[0];
    std::cout << "the answer is " << *it << std::endl;

    for (auto && p : answers)
    {
        std::cout << "the answer is " << p << std::endl;
    }

    return 0;
}

如果你用的是clang,编译的脚本参考下面

#! /bin/sh

set -e

clang -std=c++17 -lstdc++ main.cpp -o ./item18
./item18

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bruce Jia(上海)

熬夜码字换酒钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值