gpt4 book ai didi

c++ - 如何在数组 上使用位操作

转载 作者:太空宇宙 更新时间:2023-11-04 11:35:41 25 4
gpt4 key购买 nike

对于一些对性能敏感的项目(执行时间很关键,内存不是问题)我需要某种容器,它可以容纳中等大小(最多 500 个)的 bool 值。大小在编译时已知,因此似乎有两个明显的选择:

bitset<500>array<bool,500>

在这些容器上,程序必须执行大量位操作并读取/设置单个值。

直到现在我都使用 bitsets,但是 []-operator 读取/设置元素的性能非常糟糕。由于数组显然优于此处的位集,我所需要的只是某种在这些数组上使用逻辑运算符的快速方法。

所以我想要的是:

array<bool,500> a,b,c;
c = b ^ a; // ??? how to do it, need & and ^

我认为应该有一些 memcpy 或类似的魔法来做到这一点......但直到现在我才弄明白。遍历整个数组不是一种选择。 (试过了,太慢了)

最佳答案

如果你不介意内存分配,你可以使用std::valarray为此,它有 element-wise binary operators :

#include <valarray>

int main()
{
std::valarray<bool> a(500),b(500),c(500);
c = b ^ a;
}

Live demo here .

或者,您可以重载相关运算符以隐藏循环/算法调用:

#include <array>
#include <cstddef>

template<std::size_t N>
std::array<bool, N> operator^(const std::array<bool, N>& a, const std::array<bool, N>& b)
{
std::array<bool, N> c;
for(std::size_t i = 0; i<N; ++i)
c[i] = a[i] ^ b[i];

return c;
}

int main()
{
std::array<bool,500> a,b,c;
c = b ^ a;
}

Live demo here .您可以使用算法或您认为合适的任何其他方式编写运算符。

关于c++ - 如何在数组 <bool> 上使用位操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23146184/

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