흠. 글쎄, 당신이 정말로 평범한 배열 (왜?)로 그것을하고 싶다면, 당신이 할 수있는 일은 많지 않지만 마법의 가치에 의지하십시오. std::numeric_limits<double>::quiet_NaN()
(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;
}
경고 : 다음과 같이 배열의 진정한 가치가 있다면
#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());
그런 다음 나중에 확인할 수 있습니다 : 그 말을하는 것입니다 귀하의 계산이 NaN 자신을 값 생성 할 수 있다면, 당신은 끝장 이 방법. 예를 들어, 0.0/0.0
또는 std::sqrt(-1)
또는 std::log(-1)
또는 실제 값에 정의 된 값이없는 다른 값을 계산하려는 경우에 발생합니다. 계산 결과가 NaN을 생성하고 배열에 쓰는 경우이 접근법은 값이 한 번도 쓰여지지 않은 것처럼 작동합니다.
일반 배열만으로는 불가능합니다. 당신은 어떻게 든 크기를 추적해야합니다. – bzeaman
크기가 알려진 배열에서이 작업을 수행하려는 경우 기본 값으로 모든 인덱스를 초기화 한 다음 간단한 확인을 진행할 수 있습니다. 크기가 커질 수있는 가변 배열을 만들고 싶다면 무언가를 사용하는 것이 좋습니다. – streppel
가장 좋은 방법은 실제 데이터에 절대로 존재하지 않는 센티널 값으로 어레이를 초기화하는 것입니다. 그런 다음'if (array [3] [4] == SENTINEL) {'등등. – TheBigH