如何将位集传递给函数?

pco*_*der 3 c++ std-bitset

我想将位集传递给函数。我应该为函数中的位集分配多少大小。

例如

void ABC(bitset<size> a){

}
Run Code Online (Sandbox Code Playgroud)

需要为传递给函数的参数分配多少大小?

Moh*_*ain 5

您可以使用位集作为参数来对函数进行模板化

template <size_t bitsetsize>
void ABC(bitset<bitsetsize> a) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

仅当在代码中的某处使用该模板函数时,编译器才会生成该模板函数。如果将此功能用于不同大小的位集,则每个大小的单独功能将被实例化一次。因此,应注意避免代码依赖于任何局部状态变量(static函数局部变量),因为函数实例是不同的。

建议使用引用或常量引用以避免对象复制。

template <size_t bitsetsize>
void ABC(const bitset<bitsetsize> &a) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

可能不适合您的要求的替代方法是使用std::vector<bool>替代方法std::bitset


P0W*_*P0W 1

这对于 STL 来说是不可能的bitset

std::bitset<N>模板需要预先固定大小(在编译时)

但是,您可以通过使用来做到这一点的一种方法boost::dynamic_bitset


类似于以下内容:

#include <iostream>
#include <boost/dynamic_bitset.hpp>

void ABC(boost::dynamic_bitset<> &a)
{
    /* for (boost::dynamic_bitset<>::size_type i = 0;
            i < a.size(); ++i)
          std::cout << a[i]; */
    std::cout << a << "\n";
}


int main()
{
    std::size_t size= 5; // take any value for 'size' at runtime

    boost::dynamic_bitset<> x(size); // all 0's by default
    x[0] = 1;
    x[1] = 1;
    x[4] = 1;
    ABC( x );

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里