首页 > 解决方案 > 如何从向量构造整数值C++ 中的值

问题描述

#include <iostream>
#include <vector>

int main()
{
    std::vector<bool> bitvec{true, false, true, false, true};
    std::string str;
    for(size_t i = 0; i < bitvec.size(); ++i)
    {   
        // str += bitvec[i];
        std::vector<bool>::reference ref = bitvec[i];
        // str += ref;
        std::cout << "bitvec[" << i << "] : " << bitvec[i] << '\n';
        std::cout << "str[" << i << "] : " << str[i] << '\n';
    }   
    std::cout << "str : " << str << '\n';
}

我们如何从 bool 值的 std::vector 构造一个整数值。我想将它转换为 std::string,然后从 bool 值的 std::vector 转换为整数,但是将它从 bool 值的 std::vector 转换为字符串失败了。我知道 bool 和 std::string 元素的 std::vector 不是同一类型。所以同样需要帮助。

标签: c++c++11c++14

解决方案


这可能是您正在寻找的:

auto value = std::accumulate(
    bitvec.begin(), bitvec.end(), 0ull,
    [](auto acc, auto bit) { return (acc << 1) | bit; });

std::accumulate出现在<numeric>标题中

解释:我们遍历向量中的元素并不断将部分结果累积到acc. 当必须向 中添加新位时acc,我们通过左移为新位腾出空间,acc然后通过与 acc 进行或运算来添加该位。


推荐阅读