gpt4 book ai didi

c++ - c++中的位集操作

转载 作者:搜寻专家 更新时间:2023-10-31 01:57:23 24 4
gpt4 key购买 nike

我正在尝试将 bitset 参数传递给以下函数,但我无法:

error: no matching function for call to search(std::bitset<100000000ul>&, int, unsigned int, unsigned int)

代码如下:

#include <bitset>


#define ELEMENTS 100000000
#define TRANSITION_POINT 500
using namespace std;

template<unsigned int N>
unsigned int search(bitset<N> &array, int value, unsigned int low, unsigned int high) {

unsigned int middle;
.........
}

int main() {

const unsigned int NUMBER_OF_ELEMENTS = ELEMENTS;
bitset<NUMBER_OF_ELEMENTS> b;

unsigned int i = 0;
i = TRANSITION_POINT;
while(i < NUMBER_OF_ELEMENTS) {

b[i] = 1;
i++;
}

pos = search(b, (int)1, (unsigned int)0, (unsigned int)NUMBER_OF_ELEMENTS);
return 1;
}

我尝试调试代码但找不到问题所在。有人可以帮忙吗。

最佳答案

你的函数模板期望它的第一个参数是类型

std::bitset<(unsigned int)NUMBER_OF_ELEMENTS>

但是b是类型

std::bitset<(std::size_t)NUMBER_OF_ELEMENTS> 

这种细微差别意味着基于参数的类型推断将无法匹配您的模板(除非 std::size_t 恰好是 unsigned int 的别名)。

有两种解决方法:

  • 将模板的参数类型更改为 std::size_t匹配std::bitset
  • 显式使用函数模板:
    pos = search<NUMBER_OF_ELEMENTS>(b, 1, 0, NUMBER_OF_ELEMENTS);

关于c++ - c++中的位集操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5710947/

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