std::array

Jaemyeong Lee·2024년 8월 4일
0

FastCampusC++

목록 보기
28/78

첫 번째 블록 (std::array 선언 및 초기화)

{
    // int가 5개 있는 C++ 스타일 배열 선언
    // 내부적으로 정적 배열을 가지고 있다
    // 초기화가 안 되어 있으면 쓰레기 값
    array<int, 5> arr0;

    // 기본값으로 초기화(int의 경우 기본값은 0)
    array<int, 5> arr1{};

    // arr2[0], arr2[1]의 값만 세팅 되고 나머지 값들은 기본값으로 초기화(int의 경우 기본값은 0)
    array<int, 5> arr2{ 0, 1 };
}
  1. array<int, 5> arr0;int 타입의 원소 5개를 가지는 std::array를 선언합니다. 초기화되지 않으면 쓰레기 값이 들어갑니다.
  2. array<int, 5> arr1{};int 타입의 원소 5개를 가지는 std::array를 기본값(0)으로 초기화합니다.
  3. array<int, 5> arr2{ 0, 1 };는 첫 번째 원소를 0, 두 번째 원소를 1로 초기화하고 나머지는 기본값(0)으로 초기화합니다.

두 번째 블록 (std::array 원소 접근)

{
    array<int, 5> arr{ 1, 2, 3 };
    cout << arr[0] << endl;
    //cout << arr[-1] << endl; // release 빌드 시 예외 발생 안 할 수 있음(정의 되지 않은 행동)
    //cout << arr.at(-1) << endl; // 범위 벗어날 때 예외 보장 (std::out_of_range)
}
  1. array<int, 5> arr{ 1, 2, 3 };는 첫 번째 원소를 1, 두 번째 원소를 2, 세 번째 원소를 3으로 초기화합니다.
  2. arr[0]을 통해 첫 번째 원소에 접근하여 출력합니다.
  3. arr[-1]arr.at(-1)은 범위를 벗어난 접근으로, 첫 번째는 정의되지 않은 동작을 일으킬 수 있으며, 두 번째는 예외(std::out_of_range)를 발생시킵니다. 주석 처리되어 있습니다.

세 번째 블록 (배열 크기 구하기)

{
    // 배열 사이즈 구하기
    int arr0[] = { 1, 2, 3 };
    cout << sizeof(arr0) / sizeof(int) << endl;
    cout << sizeof(arr0) / sizeof(arr0[0]) << endl;

    array<int, 3> arr1 = { 1, 2, 3 };
    cout << arr1.size() << endl;
}
  1. int arr0[] = { 1, 2, 3 };는 크기를 자동으로 결정하는 C 스타일 배열입니다.
  2. sizeof(arr0) / sizeof(int)는 배열의 크기를 구합니다. (3)
  3. sizeof(arr0) / sizeof(arr0[0])도 배열의 크기를 구합니다. (3)
  4. array<int, 3> arr1 = { 1, 2, 3 };std::array를 선언하고 초기화합니다.
  5. arr1.size()는 배열의 크기를 구합니다. (3)

네 번째 블록 (배열 원소 접근)

{
    // 배열의 가장 앞, 가장 뒤 원소 구하기
    array<int, 3> arr{ 1, 2, 3 };
    cout << arr[0] << endl;
    cout << arr.front() << endl;

    cout << arr[arr.size() - 1] << endl;
    cout << arr.back() << endl;
}
  1. array<int, 3> arr{ 1, 2, 3 };std::array를 선언하고 초기화합니다.
  2. arr[0]arr.front()는 첫 번째 원소에 접근하여 출력합니다.
  3. arr[arr.size() - 1]arr.back()은 마지막 원소에 접근하여 출력합니다.

다섯 번째 블록 (배열 교환, 대입 및 비교)

{
    array<int, 5> arr0{ 1, 2, 3, 4, 5 };
    array<int, 5> arr1{ 5, 4, 3, 2, 1 };

    // 교환
    arr0.swap(arr1);

    // 대입 가능
    arr0 = arr1;

    // 비교 연산들 가능
    if (arr0 == arr1)
    {

    }
    if (arr0 > arr1)
    {

    }
    if (arr0 < arr1)
    {

    }
}
  1. array<int, 5> arr0{ 1, 2, 3, 4, 5 };array<int, 5> arr1{ 5, 4, 3, 2, 1 };를 선언하고 초기화합니다.
  2. arr0.swap(arr1);를 사용하여 두 배열을 교환합니다.
  3. arr0 = arr1;을 통해 배열을 대입합니다.
  4. 배열 간의 비교 연산(==, >, <)이 가능합니다.

여섯 번째 블록 (내부 배열 접근)

{
    array<int, 5> arr{ 1, 2, 3, 4, 5 };
    cout << arr.data()[0] << endl; // 내부 정적 배열에 접근
}
  1. array<int, 5> arr{ 1, 2, 3, 4, 5 };를 선언하고 초기화합니다.
  2. arr.data()를 사용하여 내부 정적 배열에 접근합니다. arr.data()[0]은 첫 번째 원소를 출력합니다.

정리

std::array는 C++ 표준 라이브러리에서 제공하는 정적 배열 클래스로, C 스타일 배열보다 안전하고 편리합니다. std::array를 사용하면 배열의 크기와 초기화를 명확히 지정할 수 있으며, 크기를 계산하고, 원소에 접근하고, 배열 간의 교환 및 비교 연산을 수행할 수 있습니다. std::array는 내부적으로 정적 배열을 사용하므로 성능 손실이 없으며, 범위 검사를 제공하는 at() 메서드를 통해 안전하게 원소에 접근할 수 있습니다. std::array는 C++11부터 사용할 수 있으며, 현대 C++에서는 배열 사용 시 권장됩니다.

profile
李家네_공부방

0개의 댓글