c++ - 如何从向量构造整数值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 不是同一类型。所以同样需要帮助。
解决方案
这可能是您正在寻找的:
auto value = std::accumulate(
bitvec.begin(), bitvec.end(), 0ull,
[](auto acc, auto bit) { return (acc << 1) | bit; });
std::accumulate
出现在<numeric>
标题中
解释:我们遍历向量中的元素并不断将部分结果累积到acc
. 当必须向 中添加新位时acc
,我们通过左移为新位腾出空间,acc
然后通过与 acc 进行或运算来添加该位。
推荐阅读
- asp.net - 如何使用基于令牌的授权从 Web api 下载文件
- docker - gcloud docker push 导致“拒绝:项目 'gcp-project-id-example' 的令牌交换失败。”
- python - 无法在 python 中导入 Azure 的包 NetworkSecurityGroupsOperations
- node.js - 'Error: Cyclic dependency detected' occurs when I add unique identifier to my module
- iframe - UWP 应用程序中的 PDF iframe
- c# - Word VSTO 插件:写入 Word 状态栏
- jquery - 如何在函数中获取结果作为 jquery 插件的参数
- rspec - Rails 在 rspec 测试中提供 ActiveStorage 图像
- mongodb - MongoDB Compass 中的聚合方法?
- sql-server - 使用数据透视进行年度比较的 SAP B1 查询