[C++] 배열(std::array)
필요할때 보기 위해서 모두의 코드 글을 가져와서 약간 정리함.
헤더파일
#include <array>
생성자
std::array<int, 3> arr = {1, 2, 3};
std::array<int, 3> arr{1, 2, 3};
소멸자
배열 소멸 시에 모든 원소들의 소멸자를 호출함.
대입 연산자 (operator=)
std::array<int, 3> a = {1, 2, 3};
std::array<int, 3> b;
b = a; // b 에 {1,2,3} 이 들어감.
C언어의 배열은 이러한 것이 불가능하고, memcpy등을 사용해야함.
멤버 접근 함수 at( ), operator[ ]
at
: 인덱스가 배열 범위를 벗어나면 예외를 throwoperator[ ]
: 배열의 범위를 체크하지 않음.
std::array<int,3> arr{1,2,3};
try
{
arr.at(99999999);
}
catch(std::out_of_range const& exc)
{
std::cout << "예외 발생 : " << exc.what() << '\n';
}
front( ), back( )
첫번째와 마지막 원소의 참조자를 리턴함.
배열의 크기가 0일때는 사용 불가능.
array<int, 3> arr{ 1,2,3 };
cout<<arr.front(); //1 출력
data( )
배열의 시작 주소값을 리턴
array<int, 3> arr{ 1,2,3 };
cout << *arr.data(); //1 출력
반복자들
‘c’가 붙은 것은 상수 반복자를 리턴함.
begin
,cbegin
: 시작점을 나타내는 반복자를 리턴.end
,cend
: 끝을 나타내는 반복자를 리턴.rbegin
,crbegin
: 역참조 반복자의 시작점을 리턴.rend
,crend
: 역참조 반복자의 끝점을 리턴.
std::array<int, 3> data = { 1, 2, 3 };
std::cout << "정방향 반복자 : ";
for (auto itr = data.cbegin(); itr != data.cend(); ++itr)
{
std::cout << *itr << " ";
}
std::cout << std::endl;
std::cout << "역방향 반복자 : ";
for (auto itr = data.crbegin(); itr != data.crend(); ++itr)
{
std::cout << *itr << " ";
}
std::cout << std::endl;
//출력
정방향 반복자 : 1 2 3
역방향 반복자 : 3 2 1
empty( )
크기가 0인지 확인.
bool을 리턴.
size( )
배열의 원소의 개수를 리턴
max_size( )
배열의 최대 원소 개수를 리턴.
사실 size와 max_size는 둘이 같은 것을 리턴함.
배열의 크기는 바뀔 수 없기 때문.
fill( )
배열의 원소들을 인자로 전달된 값으로 채움.
std::array<int, 5> arr;
arr.fill(3); // arr 은 {3,3,3,3,3}
swap()
두 배열의 내용을 바꿈
std::array<int, 5> arr1;
arr1.fill(1); // arr 은 {1,1,1,1,1}
std::array<int, 5> arr2;
arr2.fill(2); // arr 은 {3,3,3,3,3}
swap(arr1, arr2);
댓글남기기