У меня есть массив, называемый quint8 block[16]
который я:
block[16] = { 0 }
bool fill(const quint8 *data)
В этой функции fill
я хочу увидеть, заполнен ли массив полностью или если он содержит нулевые элементы, которые не были заполнены.
Правильно ли выполнять проверку таким образом? if(!data[i])
? Я видел подобные вопросы и ответы на этом форуме, но все они используют \0
или NULL
и я слышал, что это не очень хороший стиль для этого, и это меня смутило.
Целочисленные типы не имеют понятия "null" в C++.
Возможны две идеи:
1) Используйте некоторое определенное целочисленное значение для обозначения "не установлено". Если для ваших данных верно 0, то, очевидно, его нельзя использовать для этого. Возможно, какое-то другое значение будет работать, например максимальное значение для типа (похоже, в этом случае оно будет 0xff). Но если все ваши значения действительны для ваших данных, тогда эта идея не сработает.
2) Используйте некоторые другие данные для отслеживания значений, которые были установлены. Одним из способов может быть массив bools, каждый из которых соответствует элементу данных. Другим способом было бы просто подсчитать, сколько элементов было установлено на значение (очевидно, это работает только тогда, когда ваши данные заполняются последовательно без каких-либо пробелов).
Если ваш вопрос заключается в том, можно ли отличить элемент массива, которому было присвоено значение ноль, по сравнению с элементом, который не был назначен, но был инициализирован нулевым значением, тогда ответ будет следующим: вы не можете.
Вам нужно будет найти другой способ выполнить то, что вы пытаетесь выполнить. Трудно предложить конкретные предложения, потому что я не вижу более широкой картины того, что вы пытаетесь сделать.
0
- совершенно достоверные данные.
Это зависит от того, имеет ли тип quint8
оператор преобразования bool или какой-либо другой оператор преобразования, например, для целочисленного типа.
Если quint8
- некоторый целочисленный тип (некоторый typedef для интегрального типа), то проблем нет. Это определение
quint8 block[16] = { 0 };
инициализирует все элементы массива нулем.
Учтите, что в общем случае задача может быть выполнена с помощью алгоритмов std::find
, std::find_if
или std::any_of
объявленных в заголовке <algorithm>
quint8
?