Я пробовал что-то вроде этого:
vector<bool> x(10, 0);
vector<vector<bool> > hello(10, x);
/*some modifications on hello*/
memset(&hello, 0, sizeof(hello));
И моя программа компилируется, но она ломается. Любая идея, как я могу сделать эту операцию как можно быстрее? Я знаю, что memset, вероятно, не работает из-за вложенного вектора, но я не уверен, как выполнить эту задачу.
Я бы использовал это, которое повторно использует переменную x
указанную в вопросе.
std::fill(hello.begin(), hello.end(), x);
for(auto& bv : hello)
std::fill(begin(bv), end(bv), false);
Или если вы хотите использовать x
в качестве прототипа
std::fill(begin(hello), end(hello), x);
С кодом, который у вас есть, я бы написал...
for( auto& v : hello ) { v = x; }
предполагая, что x
остался как все-нули. Он достаточно ясен и избегает перетаскивания в <algorithm>
.
Тем не менее, скорее всего, будет быстрее изменить представление вашей битовой матрицы, от вектора векторов до одного вектора или фиксированного размера до одного bitset
.
memset
в c ++, см. Stackoverflow.com/questions/1975916/… Даже если это не приведет к ошибке во время выполнения, вы бы лучше всего очистили внешний вектор полностью и вытекли немного памяти на пути.