C++/STL 컨테이너

STL 컨테이너 - array

coding-potato 2025. 1. 7. 18:09

array

C++에서 std::array는 **STL(Standard Template Library)**에서 제공하는 컨테이너 중 하나로, 고정 크기의 배열을 다루기 위한 템플릿 기반 컨테이너입니다. 기존의 C 스타일 배열보다 안전성유용한 메서드를 제공하며, 컴파일 타임에 크기가 고정됩니다.

1. std::array의 특징

  • 정적 크기:
    • 배열 크기는 컴파일 타임에 결정되며, 런타임에는 변경할 수 없습니다.
  • 안전성:
    • 경계 검사 함수(at())를 제공하여 배열 인덱스 초과 오류를 방지.
  • 연속된 메모리:
    • 내부적으로 기존 C 스타일 배열처럼 연속된 메모리를 사용.
    • 포인터를 활용한 작업이 가능하며 다른 표준 라이브러리와 잘 통합됩니다.
  • 성능:
    • C 스타일 배열과 거의 동일한 성능을 제공합니다.
  • 추가 기능:
    • STL 컨테이너로서 크기, 정렬, 반복자(iterator) 등 다양한 기능을 제공합니다.

2. 헤더 파일

std::array를 사용하려면 <array> 헤더 파일을 포함해야 합니다.

3. 선언 및 초기화

4. 주요 멤버 함수

접근 관련

at(index) 배열의 index 위치 값을 반환하며, 경계를 초과하면 예외 발생.
operator[] 배열의 index 위치 값을 반환하며, 경계 검사를 하지 않음.
front() 배열의 첫 번째 요소를 반환.
back() 배열의 마지막 요소를 반환.
data() 배열의 첫 번째 요소에 대한 포인터를 반환 (C 스타일 배열처럼 사용 가능).

크기 관련

size() 배열의 크기를 반환.
max_size() 배열의 최대 크기를 반환 (고정 크기라 size()와 동일).
empty() 배열이 비어 있는지 여부를 반환 (false만 반환됨).

조작 관련

fill(val) 배열의 모든 요소를 val로 초기화.
swap(other) 다른 배열과 요소를 교환.

 

사용 예시

#include <iostream>
#include <array>

int main() {
    // 1. at(index)
    std::array<int, 5> arr = {1, 2, 3, 4, 5};
    std::cout << "at(2): " << arr.at(2) << std::endl; // index 2의 값 반환

    // 2. operator[]
    std::cout << "operator[]: " << arr[2] << std::endl; // index 2의 값 반환

    // 3. front()
    std::cout << "front(): " << arr.front() << std::endl; // 첫 번째 요소 반환

    // 4. back()
    std::cout << "back(): " << arr.back() << std::endl; // 마지막 요소 반환

    // 5. data()
    int* ptr = arr.data(); // 배열의 첫 번째 요소의 포인터 반환
    std::cout << "data(): " << *ptr << std::endl; // 첫 번째 요소 값 출력

    // 6. size()
    std::cout << "size(): " << arr.size() << std::endl; // 배열 크기 출력

    // 7. max_size()
    std::cout << "max_size(): " << arr.max_size() << std::endl; // 배열 최대 크기 출력

    // 8. empty()
    std::cout << "empty(): " << std::boolalpha << arr.empty() << std::endl; // 배열이 비었는지 확인 (항상 false)

    // 9. fill(val)
    arr.fill(10); // 모든 요소를 10으로 초기화
    std::cout << "After fill(10): ";
    for (const auto& elem : arr) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    // 10. swap(other)
    std::array<int, 5> other = {6, 7, 8, 9, 10};
    arr.swap(other); // arr와 other의 요소 교환
    std::cout << "After swap: arr = ";
    for (const auto& elem : arr) {
        std::cout << elem << " ";
    }
    std::cout << "\nother = ";
    for (const auto& elem : other) {
        std::cout << elem << " ";
    }
    std::cout << std::endl;

    return 0;
}

 

결과

at(2): 3
operator[]: 3
front(): 1
back(): 5
data(): 1
size(): 5
max_size(): 5
empty(): false
After fill(10): 10 10 10 10 10 
After swap: arr = 6 7 8 9 10 
other = 10 10 10 10 10

'C++ > STL 컨테이너' 카테고리의 다른 글

STL 컨테이너 - queue  (0) 2025.01.07
STL 컨테이너 - stack  (0) 2025.01.07
STL 컨테이너 - list  (0) 2025.01.07
STL 컨테이너 - vector  (0) 2025.01.07
STL 컨테이너 - map  (0) 2024.11.25