Я пытаюсь установить для всех элементов в 64-битном массиве битов значение 0. std::bitset<64> map[100]; Я знаю, что могу использовать цикл для перебора всех элементов и вызова .unset () для них вот так.

int i;
for( i = 0; i< 100 ; i++){
    map[i].unset();
}

Однако я хочу знать, есть ли «правильный» способ сделать это.

std::bitset<64> map[100] = {}; в порядке?

2
vincentleest 21 Апр 2014 в 05:30

3 ответа

Лучший ответ

Конструктор по умолчанию std::bitset инициализирует все биты до нуля, поэтому вам не нужно делать что-либо еще, кроме объявления массива.

std::bitset<64> map[100];  // each bitset has all 64 bits set to 0

Чтобы установить все биты в один, я бы использовал функцию-член bitset::set, который имеет перегрузку, которая устанавливает все биты в единицу. Объедините это с for_each, чтобы вызвать функцию-член для каждого элемента массива.

std::for_each(std::begin(map), std::end(map), 
              [](std::bitset<64>& m) { m.set(); });

Live демо

Другое решение - инициализировать каждый член массива, но это довольно утомительно для массива из 100 элементов.

std::bitset<64> map[100] = {0xFFFFFFFFFFFFFFFFULL, ... 99 times more};
7
Praetorian 21 Апр 2014 в 01:59

default constructor из bitset инициализирует все элементы к 0. Я бы сказал, что лучший способ инициализации массива - это

std::bitset<64> map[100] = {};

Поскольку это значение по умолчанию инициирует все элементы. Он также чистый, ясный и лаконичный.

1
yizzlez 21 Апр 2014 в 01:39

Кроме того, в вашем коде вы можете подумать, что 0 - это 1, и наоборот (только изменяя логику). Но только если вы умеете это делать.

-2
Gaston Fontenla Nuñez 28 Дек 2015 в 17:57