더북(TheBook)

C++는 배열에 선형 대수 연산을 제공하지 않는다. 배열을 기반으로 하는 구현은 촌스러워 보이며 오류가 발생하기 쉽다. 예를 들어 벡터를 추가하는 함수는 다음과 같다.

void vector_add(unsigned size, const double v1[], const double v2[], double s[])
{
    for (unsigned i = 0; i < size; ++i)
        s[i] = v1[i] + v2[i];
}

대개 변수가 배열인 경우는 크기 정보를 포함하지 않기에 배열의 크기를 함수의 첫 번째 매개변수로 전달했다.* 이 경우 함수의 호출자는 올바른 크기를 갖는 배열을 전달해야 한다.

int main()
{
    double x[] = {2, 3, 4}, y[] = {4, 2, 0}, sum[3];
    vector_add(3, x, y, sum);
    ...
}

배열의 바이트 크기를 단일 항목의 바이트 크기로 나누면 배열의 크기를 알 수 있다.

vector_add(sizeof x / sizeof x[0], x, y, sum);

 

* 상위 차원의 배열을 전달할 때 첫 번째 차원만 열 수 있는 반면 다른 차원은 컴파일 중에 알려야 한다. 그러나 그러한 프로그램의 코드는 금방 더러워지므로 C++에서는 더 나은 기법을 사용한다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.