У меня есть boost dynamic_bitset , из которого я пытаюсь извлечь установленные биты:
boost::dynamic_bitset<unsigned long> myBitset(1000);
Моей первой мыслью было сделать простой цикл «dump» для каждого индекса и спросить, установлен ли он:
for(size_t index = 0 ; index < 1000 ; ++index)
{
if(myBitset.test(index))
{
/* do something */
}
}
Но потом я увидел два интересных метода, find_first()
и find_next()
, которые, как я думал, наверняка предназначены для этой цели:
size_t index = myBitset.find_first();
while(index != boost::dynamic_bitset::npos)
{
/* do something */
index = myBitset.find_next(index);
}
Я провел несколько тестов, и кажется, что второй метод более эффективен, но меня беспокоит, что может быть другой «более правильный» способ выполнить эту итерацию. Я не смог найти никаких примеров или примечаний в документации, указывающих правильный способ перебора установленных битов.
Итак, использование find_first()
и find_next()
лучший способ перебрать dynamic_bitset
, или есть другой способ?