如何将bitset传递给函数?

时间:2014-05-26 09:39:29

标签: c++ std-bitset

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

e.g。

void ABC(bitset<size> a){

}

需要分配给函数中传递的参数的大小是什么?

2 个答案:

答案 0 :(得分:4)

你可以templatize将bitset作为参数的函数。

template <size_t bitsetsize>
void ABC(bitset<bitsetsize> a) {
   ...
}

只有在代码中的某个地方使用时,编译器才会生成这个模板化函数。如果对不同大小的位集使用此函数,则会为每个大小实例化一次单独的函数。所以你应该注意避免代码,这取决于任何本地状态变量(函数本地的static变量),因为函数实例是不同的。

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

答案 1 :(得分: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;
}

请参阅here