cpp array class
fixed size의 순서있는 컨테이너. 선형적 연속으로 순서있게 요소들이 배열된다.
다른 표준 컨테이너들과는 달리 고정된 크기이고 요소들의 메모리 할당을 관리하지 않는다.
동적인 확장이 불가능하다. zero-size 도 가능하지만 dereference할 수는 없다.
#include <array>
+이터레이터 함수.
begin(), end(), rbegin(), rend(), cbegin(), cend(), crbegin(), crend()
사용 방법은 벡터와 같다.
+용량 함수
size() ; 요소 개수
max_size(); 최대 개수. array에서는 size()와 같다.
empty() ; 비었는지 확인. true/false
+요소 접근
[] operator
at()
front(); 처음 요소값을 참조로 리턴
back() ; 마지막 요소값을 참조로 리턴
data() ; 데이터 포인터를 얻어온다.
+수정
fill() ; 특정 값으로 채운다.
swap() ; 같은 타입인 두 개의 배열을 서로 바꾼다. (같은 크기여야 한다. 다른 크기면 컴파일 에러)
+at과 []의 차이점.
둘 다 주어진 인덱스의 요소를 참조로 리턴한다. at은 파라미터로 주어진 인덱스가 범위를 벗어나면 out_of_range exception이 발생한다. [] operator에서는 범위를 벗어나면 프로그램이 죽는다.(범위체크가 없음. 수동으로 해줘야 함.)
std::array<int, 10> arr1 ;
for (int i=0; i<10; i++) arr1.at(i)=i+1 ; // 1부터 10까지 할당
std::cout << arr1.front() << std::endl ; // 첫 번째 요소 값 출력. 1
std::cout << arr1.back() << std::endl ; // 마지막 요소 값 출력. 10
arr1.front() =100 ; // 첫 번째 요소에 100을 할당. 1 대신 100으로 덮어씀.
arr1.back() = 50 ; // 마지막 요소에 50을 할당. 10대신 50으로 덮어씀.
const char* cstr="Test string"; // 11자 alpha+1 null char.
std::array<char,12> arr2 ;
std::memcpy(arr2.data(), cstr, 12) ;
std::cout << arr2.data() << std::endl ; // 위 스트링이 출력됨.
std::array<int, 6> arr1 ; // int 타입 6개 크기 배열을 생성.
arr1.fill(5) ; // 5로 전부 채움.
std::array<int, 5> f = {1,2,3,4,5} ;
std:;array<int, 5> g={10,20,30,40,50} ;
f.swap(g) ; // f, g를 바꿈.
for (int &x : f) std::cout << x << ' ' ; // 모든 원소 출력. 10 20 30 40 50
std::cout<<'\n' ;
참고) std::fill_n( 위치, 개수, 값) ; 특정 위치에서 n개를 특정 값으로 채움.
fill_n( OutputIterator first, Size n , const T & val) ;
std::vector<int> v1(8, 10) ; // 8개 10으로 다 채움.
std::fill_n(v1.begin(), 4, 20) ; // 처음부터 4개를 20으로 채움. 20,20,20,20,10,10,10,10
std::fill_n(v1.begin()+3, 3, 33 ) ; // 인덱스3번 위치부터 3개를 33으로 채움. 20, 20, 20, 33, 33, 33, 10, 10