반응형

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





'Develop > C&CPP' 카테고리의 다른 글

map  (0) 2018.05.29
List 1  (0) 2018.05.28
Vector 3  (0) 2018.05.23
Vector 2  (0) 2018.05.18
Vector 1  (0) 2018.05.16

+ Recent posts