将矢量<bool>转换为整数
convert vector<bool> to int
我有一个bool
的vector
,我想复制到一个更大尺寸的int
容器中。有什么快速的方法吗?
澄清一下,是否有更聪明的方法来实现这一点?
#include <vector>
#include <cstdint>
#include <iostream>
#include <climits>
#include <cassert>
inline size_t bool2size_t(std::vector<bool> in) {
assert(sizeof(size_t)*CHAR_BIT >= in.size());
size_t out(0);
for (size_t vecPos = 0; vecPos < in.size(); vecPos++) {
if (in[vecPos]) {
out += 1 << vecPos;
}
}
return out;
}
int main () {
std::vector<bool> A(10,0);
A[2] = A[4] = 1;
size_t B = bool2size_t(A);
std::cout << (1 << 2) + (1 << 4) << std::endl;
std::cout << B << std::endl;
}
我正在寻找类似memcpy
的东西,我可以在子字节级别上使用。
下面是一个使用c++ 11的例子:
#include <vector>
#include <iostream>
#include <numeric>
using namespace std;
int main() {
vector<bool> b(10,0);
b[2] = b[4] = 1;
int i;
i = accumulate(b.rbegin(), b.rend(), 0, [](int x, int y) { return (x << 1) + y; });
cout << i << endl;
}
另一个使用GCC内部组件的vector<bool>
的更高效的解决方案:
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
vector<bool> b(10,0);
b[2] = 1;
b[4] = 1;
auto p = b.begin()._M_p;
cout << *p << endl;
}
请注意,不建议使用vector<bool>
,因为它是vector<T>
的一个有问题的专门化,并且具有稍微不同的API。我建议使用vector<char>
,或者创建自己的Bool
包装器类,与bool
进行隐式转换。
实现可以按照您想要的方式将vector<bool>
存储为位集,但不是必须这样做。如果可以更改类型,请查看bitset
模板类,它的工作方式相同,但实现了例如to_ulong
。
参见这个问题。
编辑:如果Boost是OK的,有dynamic_bitset,它将为您做分块,如果您需要存储超过unsigned long
可以容纳。
相关文章:
- 努力将整数转换为链表。不知道我在这里做错了什么
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 如何在C++中将整数转换为其数字数组
- 尝试将字符串/字符转换为整数会产生意外结果
- 如何使用C++将字符串中的字符转换为整数变量
- 如何将整数字符串转换为整数的二维向量?
- 如果整数与指针大小相同,则重新解释将整数转换为指针双射是否具有双射作用?
- 使用 "stringstream " 将字符串转换为整数
- 将字符串转换为浮点数或整数,而无需使用内置函数(如 atoi 或 atof)
- 如何检测 std::vector::emplace_back 上的隐式转换损失整数精度
- 如何防止双精度值到整数的隐式转换
- 为什么此指针值不能转换为整数的规则是什么?
- 如何解决隐式转换丢失整数精度:'size_t'(又名"无符号长")到'int'警告?
- 在 C++ 中将整数数组转换为位集表示形式的最佳方法?
- 为什么在将 void 指针转换为整数指针时出现分段错误
- 将字符串(可以是十进制字符串或十六进制字符串)转换为整数C++
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 如何使用 STL 算法将整数向量转换为字符串向量?
- 无法将"整数 (*)[m]"转换为"整数 (*)[100000]
- 静态强制转换允许转换对象指针,但不允许转换整数