programming/C++

[C++] STL - Array 정리

KoTiv 2021. 12. 27. 11:55
반응형
SMALL

2021.12.24 - [programming/C++] - [C++] STL Container 특징 과 String class

 

[C++] STL Container 특징 과 String class

STL(Standard Template Librate ) 란 ? C++ 템플릿을 이용한 표준으로 정리된 라이브러리로 구성요소로 반복자, 컨테이너, 알고리즘을 3가지 구성요소로 가지고있다. ** string 은 c++ 표준라이브러리로 STL에

hofe-rnd.tistory.com

 

 

Array란?

c++에 내장되어있는 고정 배열(Fixed Array)를 대체 할 수 있는 고정 길이 자료구조 Container이다.

[ 즉 함수에 전달시 포인터로 형 변환되지 않는 고정 길이 배열 이다 ]

std::array 크기가 고정이기때문에 Heap을 쓰지 않고 Stack을 사용하게된다. - 기존 배열역시 Stack에 저장이 된다 .

다른 Container들과 함께 여러 멤버 함수를 사용할 수 있게된다. 

그렇게 때문에 임의의 접근 ( [ ] . at() 을 사용하여 임의의 Array에 접근할 수 있다 . ) 

array 를 사용하기 위해서는 <array> 헤더를 지정해주어 사용할 수 있다.

 

결론을 먼저 말해본다면 

* 1. 배열보다 Array container를 사용시 더 용이하게 사용할 수 있으며 

* 2. 고정된(Fixed size)인경우는 Array Container를 사용하고 

* 3. 동적으로 변하는 배열을 사용하게 된다면 Vector를 사용하는게 더 편하다 . 

생성자 사용방법 정리 

std::array는 aggregate 타입이기 때문에 aggregate 초기화 방식을 사용할 수 있다. 

- template < typename T, size_t N > class array;

- T는 데이터 타입 , 클래스 등 배열로 관리할 타입

- N은 인자의 개수, [ 고정배열 특징으로 사이즈까지 넣어서 생성 해야한다 ] 

 

** Template란 ?

 : 어원 그대로 함수나 클래스를 개별적으로 다시 작성하지 않아도 , 여러 자료 형으로 사용할 수 있도록 하게 만들어 놓은 틀이다.  Template는 Function Template와 Class Template로 나눌수 있다.

 

선언 예시

std::array<int, 3> arr= {1,2,3} - 생성과 동시에 초기화 

std::array<double, 6> arr; - 초기화 하지않은상태 garbage데이터 6개.

std::array<int,10> arr = {0 }; 10개의 배열 값 0으로 초기화 

std::array<int,10>arr = {2}; 첫값은 2로 초기화 남은 9개는 0으로 초기화 

std::array<int, 4>arr; arr = {1, 2, 3, 4 } ; - 생성 후 초기화로 복사가 되는것은 아님 , 

멤버함수 정리
a<int,10> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; 으로 arr변수를 사용하였다는 전제

멤버함수 원형 descrption 비고
at(index) at( size_type pos);  pos ;
positive of the element return.
 ( pos < sizoe() ) 
index 번째 인자를 반환
arr.at(2) '
-> 3
. at() 함수는 유효 범위검사를 진행하여 [] 보다 성능은 느리지만 더 안전하다 
arr[index] ( size_type pos );  pos ;
positive of the element return.
index 번째 인자를 반환
arr[2] -> 3 
. 경계범위를 검사하지 않기때문에 범위를 벗어난경우 오류가 발생할 수 있다.
front() const_reference front() . array의 첫 번째 원소를 반환 . arr.front()
-> 1
back() const_reference back() . array의 마지막 원소를 반환 . arr.back()
-> 10
data() T* data . 데이터 배열 포인터를 반환 . arr.data()
-> &front 를 반환함 .
&front는 컨테이너 내부의 실제 원소를 저장하는 표준 배열의 주소이다.
. 만약 컨테이너가 비어있다면 포인터는 첫번째 원소의 주솟값을 반환한다.
begin() iterator begin() . array의 첫 번째 원소를 가리키는 반복자를 반환 arr.begin()

cbegin() const_iterator cbegin() . array의 첫 번째 원소를 가리키는 반복자를 반환
. 순회 불가능 
 
end() iterator end() . array의 마지막 원소 다음의 공간을 가리키는 반복자 반환  
cend() const_iterator cend() . array의 마지막 원소 다음의 공간을 가리키는 반복자 반환
. 순회 불가능 
 
rbegin() reverse_iterator rbegin() . array의 마지막 원소를 가리키는 역순 반복자 반환   
crbegin() const_reverse_iterator crbegin() . array의 마지막 원소를 가리키는 역순 반복자 반환
. 순회 불가능 
 
rend()  reverse_iterator rend() . array의 첫 번째 원소 이전의 공간을 가리키는 반복자 반환  
crent() const_reverse_iterator crend() . array의 첫 번째 원소 이전의 공간을 가리키는 반복자 반환
. 순회불가능
 
empty() bool empty() . array의 size가 0이면 True . array 컨테이너에 데이터가 있는지 비어있는지 검사할 수 있음.

size() size_type size() . array의 크기를 반환 arr.size()
-> 10
max_size() size_type smax_size() . array의 크기를 반환 arr.max_size() 
-> 10
fill() void fill(const T& value) . 주어진 파라미터로 array를 초기화 arr.fill( 10) 
=> { 10, 10, 10 ,10 ,10 ,10 ,10 ,10 ,10}

assign() void assign(const T& value) . 주어진 파라미터로 array를 초기화  
swap() void swap(array& _Other) . 두 array의 내용을 바꾼다.  
get<n> template< std::size_t I, class T, std::size_t N > 
T& get( std :: arrat<T,N>&a );
. array의 n번째 원소에 접근  . 상수식이어야 하기때문에 루프 변수로 사용할 수 없음.
. arr<0>(arr) = 1;
swap template < class T, std::size_t N> void swap(std::array <T,N> &lhs, std::array<T,N>&rhs> .두 array의 내용을 바꾼다.
. lhs, rhs는 바꾸게될 컨테이너이다.

 
to_array      
tuple_szie      
tupe_element      

begin() & end () 자료 구조 

rbegin & rend 자료구조 .

reference

https://en.cppreference.com/w/cpp/container/array

 

std::array - cppreference.com

template<     class T,     std::size_t N > struct array; (since C++11) std::array is a container that encapsulates fixed size arrays. This container is an aggregate type with the same semantics as a struct holding a C-style array T[N] as its only non-s

en.cppreference.com

 

반응형
LIST