Boost - dynamic_bitset

0

Witam,

Mam problem z biblioteką boost a konkretnie klasą dynamic_bitset.
Chodzi o to że mogę sobie ustawić rozmiar bitsetu w ten sposób:

 boost::dynamic_bitset<> x(12);

no i mam pytanie czy da się to zrobić jakoś tak:

boost::dynamic_bitset<> x;

x = new boost::dynamic_bitset(100) ;

próbuję tego ale mi to nie wychodzi..

0

Nie da się tak. Musisz robić albo:

boost::dynamic_bitset<> x;
x.resize(12);

// lub, nie polecam bo nie ma sensu w tym przypadku

boost::dynamic_bitset<>* x;
x = new boost::dynamic_bitset<>(100);
0

mam jeszcze takie pytanie jak w tym bit_seice ustawić losowe wartości bitów:

Napisałem sobie funkcje która działa ale wolno: może ktoś ma lepszy pomysł:

  bool r = 0;
  for( int i = 0 ;i < chromSet.size() ;i++ )
  {
		r = rand() % 2;
		if (r)
		   chromSet[i] = 1;
		else
		   chromSet[i] = 0;
  }
0

nie używałem tej klasy, ale podejrzewam że wyglądałoby to mniej więcej tak:

for (boost::dynamic_bitset<>::iterator i = chromSet.begin(); i!=chromSet.end(); ++i)
  {
   *i = (bool)rand();
  }

jak tamto nie pojdzie do wnetrze petli zapisz tak:

                   chromSet[i] = (bool)rand();

ale z tego co wiem szybciej działało by gdybyś użył nie resize tylko reserve, a pozniej uzywal:

int ilosc = 10;
while (ilosc--)
  chromSet.push_back((bool)rand());
0

powolność działania wynika raczej z nadużywania funkcji rand().
Moim zdaniem lepiej zrobić coś w tym stylu (losowanie kilku bitów jedną wartością rand()):

const int RandomBitsAtOnce = 8;
...

for(int i=0; i<MaxBits/RandomBitsAtOnce; ++i) {
      int r = rand() / (1<<RandomBitsAtOnce);
      for(int j=0; j<RandomBitsAtOnce; ++j) {
            bitSet.set(i*RandomBitsAtOnce+j, (r&(1<<j))!=0);
      }
}

To jest tylko zarys rozwiązania, tu są pewne błędy, które łatwo wyeliminować w konkretnej implementacji.

0

wasze rozwiązania są do kitu bo nie dają dobrej losowości:

jak dam coś takiego: (bool) rand();// ... to wychodzą same jedynki...
w drugim przypadku to samo...

0

(bool)rand() - jeśli ktoś rozumie konwersje do bool to załapie czemu masz same jedynki
u mnie była literówka, miało być j było i, w: (r&(1<<j))!=0

1 użytkowników online, w tym zalogowanych: 0, gości: 1