Как проверить, пуст ли элемент массива классов? [c++]
Для моего последнего задания мне нужно создать хэш-таблицу, в которой хранятся акции, которые заключены в класс. Чтобы избежать столкновений, мне нужно использовать линейное зондирование. Однако проблема, с которой я столкнулся; что я не могу проверить, является ли элемент массива (который является хэш-таблицей) пустым.
Здесь некоторый код агрегирован из нескольких файлов, но это только для того, чтобы дать вам представление о том, что происходит.
Это дает ошибку: никакой оператор «! tag-list»> class hashmap hashtable arrays c++
Если у вас есть массив объектов типа X , ни один из слотов не будет «пустым». Все они содержат объект типа X Чтобы представлять пустой объект, это должно быть возможное состояние типа, которое хранится в массиве. Например, у вас может быть boost::optional<Slot> или std::unique_ptr<Slot> . В противном случае вы можете закодировать состояние непосредственно в свой Slot класс (например, с членом bool).
Что вы хотите сделать, так это хранить массив указателей запаса, в то время как в настоящее время вы храните массив объектов Slot. Чтобы сделать вещи еще проще для вас, вы можете использовать вектор для хранения указателей.
Ваша структура данных резервного копирования будет выглядеть так:
Каждый элемент в векторе является «слотом», и вам не нужен ваш слот-класс, если вы не собираетесь хранить некоторые метаданные о запасе.
Чтобы проверить, есть ли у вас запас в любом слоте вектора, вы сравниваете векторный элемент с NULL следующим образом:
Этот подход имеет положительный побочный эффект: вам не нужно выделять X-количество фондовых объектов спереди, где X — размер вашего хэш-карты (возможно, очень большое число, в зависимости от того, как часто вы сталкиваетесь).
Как проверить пустой ли массив c
Можно проверить на Nothing .
Например:
If Arr Is Nothing Then MsgBox("Массив не инициализирован") Else MsgBox("Размер массива: " & Arr.Length)
Согласен с Алексеем, но есть и другие возможности.
1) Нужно проверить размер массива:
if Arr.Length = 0 then
MsgBox("Массив пуст.")
end if
Может быть в VB.NET это не особо актуально, т.к. там сложно (если возможно) создать массив нулевой длины, но в C# эта проверка нужна.
2) Нужно проверить сами члены массива, т.к. можно создать массив произвольной длины, но данных в нем еще не будет: