gpt4 book ai didi

c++ - 将 vector 转换为 int

转载 作者:太空狗 更新时间:2023-10-29 19:43:33 25 4
gpt4 key购买 nike

我有一个 boolvector,我想将其复制到更大的 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 的包装类.

关于c++ - 将 vector <bool> 转换为 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24994665/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com