我想将bitset传递给函数。我应该为函数中的bitset分配多大的大小。
e.g。
void ABC(bitset<size> a){
}
需要分配给函数中传递的参数的大小是什么?
答案 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