Самый быстрый способ обнулить вектор <vector <bool>>

0

Я пробовал что-то вроде этого:

vector<bool> x(10, 0);
vector<vector<bool> > hello(10, x);

/*some modifications on hello*/

memset(&hello, 0, sizeof(hello));

И моя программа компилируется, но она ломается. Любая идея, как я могу сделать эту операцию как можно быстрее? Я знаю, что memset, вероятно, не работает из-за вложенного вектора, но я не уверен, как выполнить эту задачу.

  • 0
    всегда ли второе измерение размером 10? Я имею в виду всегда всегда?
  • 1
    Вы должны быть осторожны, используя memset в c ++, см. Stackoverflow.com/questions/1975916/… Даже если это не приведет к ошибке во время выполнения, вы бы лучше всего очистили внешний вектор полностью и вытекли немного памяти на пути.
Теги:
vector

3 ответа

2
Лучший ответ

Я бы использовал это, которое повторно использует переменную x указанную в вопросе.

std::fill(hello.begin(), hello.end(), x);
2
for(auto& bv : hello) 
    std::fill(begin(bv), end(bv), false);

Или если вы хотите использовать x в качестве прототипа

std::fill(begin(hello), end(hello), x);
0

С кодом, который у вас есть, я бы написал...

for( auto& v : hello ) { v = x; }

предполагая, что x остался как все-нули. Он достаточно ясен и избегает перетаскивания в <algorithm>.

Тем не менее, скорее всего, будет быстрее изменить представление вашей битовой матрицы, от вектора векторов до одного вектора или фиксированного размера до одного bitset.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню