공부한거/C++

#include <array>

tl;dr 2024. 11. 21. 19:48

array를 쓰게 해주는 STL같다.

#include <iostream>
#include <array>

int main() {
    std::array<int, 5> arr = {1, 2, 3, 4, 5};
    std::array<int, 5> zeroArr{};
    
    std::cout << "What: " << arr[1] << std::endl;
    std::cout << "What: " << zeroArr[1] << std::endl;

}

결과값은 2, 0이 나온다. 

위는 명시적으로 초기화를, 아래는 그냥 0으로 초기화했다.

 

#include <iostream>
#include <array>

int main() {
    std::array<int, 5> arr = {1, 2, 3, 4, 5};
    std::cout << "Size: " << arr.size() << std::endl; 
}

Size: 5가 출력된다. sizeof()을 굳이 안해도 잘 출력되는 모습을 볼 수 있다.

 

#include <iostream>
#include <array>

int main() {
   std::array<int, 5> arr = {1, 2, 3, 4, 5};
    std::cout << arr[2] << std::endl;      
    std::cout << arr.at(2) << std::endl; 
    //std::cout << arr[5] << std::endl;
    //std::cout << arr.at(5) << std::endl;
}

operator[] : 빠른 접근, 범위 초과검사 없음.

at(): 안전한 접근, 범위 초과 시 예외(std::out_of_range) 발생.

 

#include <iostream>
#include <array>

int main() {
   std::array<int, 5> arr = {1, 2, 3, 4, 5};
    for (auto it = arr.rbegin(); it != arr.rend(); ++it) {
        std::cout << *it << " ";  // 출력: 1 2 3 4 5
    }

}

 

  • begin() / end(): 처음과 끝 반복자.
  • cbegin() / cend(): 읽기 전용 반복자(const).
  • rbegin() / rend(): 역방향 반복자.
#include <iostream>
#include <array>

int main() {
    std::array<int, 5> arr1 = {1, 2, 3, 4, 5};
    std::array<int, 5> arr2 = {10, 20, 30, 40, 50};

    // fill
    arr1.fill(0);  // arr1: {0, 0, 0, 0, 0}

    // swap
    arr1.swap(arr2);  // arr1: {10, 20, 30, 40, 50}, arr2: {0, 0, 0, 0, 0}
    std::cout << arr1.at(3)<< std::endl;
    std::cout << arr2.at(3)<< std::endl;
}

배열 조작

  • fill(): 모든 요소를 특정 값으로 설정.
  • swap(): 두 배열의 내용을 교환.
#include <iostream>
#include <array>

int main() {
    std::array<int, 5> arr = {1, 2, 3, 4, 5};
    std::cout << "First: " << arr.front() << std::endl;  // 출력: First: 1
    std::cout << "Last: " << arr.back() << std::endl;   // 출력: Last: 5
    
    int* ptr = arr.data();  // C 스타일 배열처럼 사용
    std::cout << "First element: " << ptr[0] << std::endl;  // 출력: First element: 1
}

6. 기타 메서드

  • front(): 첫 번째 요소 반환.
  • back(): 마지막 요소 반환.
  • data(): 내부 C 스타일 배열 포인터 반환.