2021.12.24 - [programming/C++] - [C++] STL Container 특징 과 String class
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
'programming > C++' 카테고리의 다른 글
[C++] STL MAP 정리 (0) | 2022.03.29 |
---|---|
[c++] STL Queue , Stack 정리 (0) | 2022.03.29 |
[C++] STL - Vector 정리 (0) | 2021.12.27 |
[C++] String class (0) | 2021.12.24 |
[C++] STL Container 특징 과 String class (0) | 2021.12.24 |