std :: vector <bool> resize()的未定义行为

时间:2017-04-28 06:25:49

标签: c++ visual-studio vector standards undefined-behavior

#include <vector>
int main()
{
    try {
        std::vector<bool> a;
        a.resize(a.max_size() - 100000000);
    }
    catch (...) {
        return -1;
    }
    return 0;
}

我尝试使用VS2015 x86运行此程序,但它在resize()中使用&#34;访问冲突&#34;崩溃了。我想知道是否有任何未定义的行为? C ++标准对此有何看法?

1 个答案:

答案 0 :(得分:1)

vector<bool>并不总是表现得像一个向量,它实际上从不存储bool,而是一个用于保存的bool的压缩表示 空间(位域)。 vector<bool>不满足要求 STL容器,你最好不要使用它。 deque<bool>和bitset是替代方案 数据结构几乎肯定会满足您对承诺能力的需求 vector<bool>