【发布时间】:2014-09-19 14:33:19
【问题描述】:
我有一个 vector 或 bool,我想将其复制到更大尺寸的 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;
}
我正在寻找类似 @987654325@ 的东西,我可以在子字节级别上使用它。
【问题讨论】:
-
您想将一个向量复制到另一个向量吗?
-
根据您是否需要动态大小的容器,您应该考虑使用 std::bitset 代替它的 to_ulong() 方法。
-
我不想将
vector<bool>的内存复制到设置为零的int中。重要的是它的大小可能不能被 8 整除。 -
@staticx:
vector<bool>,不幸的是,它并不是真正的vector。其中,您是否可以从中获得ForwardIterator是由实现定义的...... -
使用 C++11,您可能可以在布尔向量上使用
std::hash()来实现您想要的。