더북(TheBook)

함수에 std::array 객체를 전달할 경우, 기본적으로 새로운 배열에 모든 원소가 복사됩니다. 즉, 자동으로 깊은 복사가 동작합니다. 만약 이러한 동작을 피하고 싶다면 참조 또는 const 참조를 사용할 수 있습니다. 즉, 프로그래머의 선택에 따라 동작을 결정할 수 있습니다.

배열의 원소를 차례대로 접근하는 연산은 매우 자주 발생합니다. std::array는 반복자(iterator)와 범위 기반 for(range-based for) 문법을 이용하여 원소에 차례대로 접근할 수 있습니다. 배열의 모든 원소를 출력하는 코드는 다음과 같이 작성할 수 있습니다.

std::array<int, 5> arr = {1, 2, 3, 4, 5};
for (auto element : arr)
{
    std::cout << element << ' ';
}

이 예제 코드의 출력은 다음과 같습니다.

1 2 3 4 5

배열의 모든 원소를 차례대로 출력하기 위해 인덱스 값을 사용하는 for 반복문을 사용할 수도 있지만, 이 경우에는 배열의 크기를 정확하게 지정해야 합니다. 만약 인덱스 값이 배열 크기보다 같거나 커지면 에러가 발생합니다.

범위 기반 for 반복문을 사용하여 std::array의 모든 원소에 접근할 수 있는 것은 반복자를 사용하기 때문입니다. std::arraybegin()end()라는 이름의 멤버 함수를 제공하며, 이들 함수는 가장 첫 번째 원소와 가장 마지막 원소의 위치(정확하게는 마지막 원소 다음 위치)를 반환합니다. 특정 원소 위치에서 다음 원소 위치로 이동하려면 반복자에 증가 연산자(++) 또는 덧셈 연산자(+) 같은 산술 연산을 수행할 수 있습니다. 즉, 범위 기반 for 반복문은 begin() 위치부터 시작하여 증가 연산자(++)를 통해 차례대로 원소를 이동하다가 end() 위치에 도달하면 종료합니다. 반복자는 std::array, std::vector, std::map, std::set, std::list처럼 반복 가능한 모든 STL 컨테이너에 대해 사용할 수 있습니다.

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