我想将位集传递给函数。我应该为函数中的位集分配多少大小。
例如
void ABC(bitset<size> a){
}
Run Code Online (Sandbox Code Playgroud)
需要为传递给函数的参数分配多少大小?
您可以使用位集作为参数来对函数进行模板化。
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。
这对于 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)
看这里
| 归档时间: |
|
| 查看次数: |
5252 次 |
| 最近记录: |