Как передать битсет в функцию?

Я хочу передать bitset в функцию. Какой размер я должен назначить для набора битов в функции.

например

void ABC(bitset<size> a){

}

Какой должен быть размер, который нужно назначить параметру, передаваемому в функцию?

2

Решение

Вы можете templatize функция, принимающая бит в качестве аргумента.

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

Эта шаблонная функция будет сгенерирована компилятором только тогда, когда вы используете ее где-то в своем коде. Если вы используете эту функцию для наборов битов разных размеров, отдельные функции будут созданы один раз для каждого размера. Поэтому вы должны позаботиться о том, чтобы избежать кода, зависящего от любых локальных переменных состояния (static переменные, локальные для функции), поскольку экземпляры функций различны.

Альтернатива, которая может нет быть пригодным для ваших требований, чтобы использовать std::vector<bool> вместо std::bitset если возможно.

4

Другие решения

Это невозможно с 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;
}

Увидеть Вот

1

По вопросам рекламы [email protected]