Hm. Ну, если вы действительно хотите сделать это с помощью простых массивов (почему?), Вы не можете много сделать, но полагаться на магическое значение. Я бы предложил std::numeric_limits<double>::quiet_NaN()
(NaN = не число). То есть:
#include <algorithm>
#include <limits>
double data[10][20]; // maximum dimensions mandatory with arrays. There's
// no way around that, and you can't grow it later.
std::fill(data[0], data[0] + 10 * 20, std::numeric_limits<double>::quiet_NaN());
Затем вы можете позже проверить, есть ли реальное значение в массиве, как так:
if(!std::isnan(data[1][2])) { // #include <cmath> for std::isnan
// oh, look, there's a value here!
} else {
// Nothing here yet. Better fill it
data[1][2] = 123.0;
}
Предостережения: Если ваши расчеты могут производить NaN самих значений, вы влипли сюда. Это происходит, например, если вы попытаетесь вычислить 0.0/0.0
или std::sqrt(-1)
или std::log(-1)
или что-то еще, что не имеет определенного значения в действиях. Если ваши вычисления производят NaN, и вы записываете их в массив, этот подход будет действовать так, как если бы значение никогда не было написано там.
С помощью простых массивов он не может. Вам нужно как-то следить за размером. – bzeaman
Если вы планируете делать это в массиве, в котором известен размер, вы можете инициализировать все индексы со значением по умолчанию, а затем перейти к простой проверке. Если вы хотите создать изменяемый массив, который растет его размер динамически, тогда я бы использовал, используя что-то «странное». – streppel
Ваш лучший выбор - инициализировать массив с некоторым количеством дозорных значений, значение, которое никогда не будет иметь реальных данных. Тогда 'if (array [3] [4] == SENTINEL) {' и так далее. – TheBigH