2014-12-05 2 views
0

나는 포인터 * double 배열을 가지고 있으며, 기본적으로 그들은 어떤 순서로든 색인이 생성됩니다. 예를 들어배열 색인이 존재하는지 확인하는 방법

, 내가 예를 들어 double[1][2]가 존재하는지 확인하고 그렇지 않은 경우 다음 중 하나를 만들려면 어떻게해야합니까

double[0][0] = 80.0 
double[3][0] = 56.8 
double[4][0] = 56.7 

.

vectors 또는 무엇인가 'fancy'을 사용하려는 것은 아닙니다. 일반 배열 일뿐입니다.

+4

일반 배열만으로는 불가능합니다. 당신은 어떻게 든 크기를 추적해야합니다. – bzeaman

+0

크기가 알려진 배열에서이 작업을 수행하려는 경우 기본 값으로 모든 인덱스를 초기화 한 다음 간단한 확인을 진행할 수 있습니다. 크기가 커질 수있는 가변 배열을 만들고 싶다면 무언가를 사용하는 것이 좋습니다. – streppel

+0

가장 좋은 방법은 실제 데이터에 절대로 존재하지 않는 센티널 값으로 어레이를 초기화하는 것입니다. 그런 다음'if (array [3] [4] == SENTINEL) {'등등. – TheBigH

답변

2

흠. 글쎄, 당신이 정말로 평범한 배열 (왜?)로 그것을하고 싶다면, 당신이 할 수있는 일은 많지 않지만 마법의 가치에 의지하십시오. 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을 생성하고 배열에 쓰는 경우이 접근법은 값이 한 번도 쓰여지지 않은 것처럼 작동합니다.

+0

배열을 선언 할 때 크기를 지정해야합니다. 예를 들어, 'double myArray [20] [20]; 그래서 가장 큰 오프셋은 myArray가 될 것입니다. [19] (오프셋은 C에서 0부터 시작합니다.) – user3629249

+0

왜 나에게 이렇게 말하고 있는지 혼란스러워합니다. – Wintermute

+0

@ user3629249 내가 삭제 한 댓글을 참조하는 것 같습니다. – Wolf

관련 문제