벡터 Vector
vector는 STL의 가장 기본적인 container자료 구조이다. 벡터는 쉽게 말하자면 한쪽이 열린 array라고 할 수 있다. array에 비해 수행 시간은 다소 길지만, 데이터를 push, pop할 수 있다는 장점이 있다.
또한 다양한 built-in 연산을 지원하므로, 해당 연산들을 잘 숙지하기만 한다면 보다 빠르고 정확한 코드 작성이 가능하다.
몇몇 자료구조를 간단히 정리하면 아래와 같다.
C-style array : 크기가 정해져 있음. 오래된 스타일
STL array : 사용자의 편의성이 더해짐
STL vector : 한 쪽 방향으로 크기를 늘릴 수 있음
STL deque : 양 쪽 방향으로 크기를 늘릴 수 있음
배열 vs 벡터
자료구조를 선택할 때 배열을 선택할 것인가 벡터를 선택할 것인가는 아래의 기준에 따르면 편리하다.
추후 크기가 늘어나야 하는가? :
배열의 경우 선언 할 때 크기가 정해지기 때문에 추후 크기를 많이 늘려야 한다면 벡터가 유리하다. 그러나 크기가 늘어 날 필요가 없는 경우는 배열이 유리하다.
*주의 : vector는 일반적으로 뒤에 새로운 원소를 넣기 위한 자료구조이다. 그러나 insert라는 함수를 제공하는데, 이는 vector의 앞쪽(처음 혹은 중간)에 원소를 삽입할 수 있도록 도와준다.
그러나, insert함수는 맨 뒤에 요소를 추가하는 push_back에 비해 일반적으로 더 많은 자원을 소모한다(즉 시간이 더 오래걸린다)
벡터의 각종 함수들
벡터에서 사용하는 기본적인 함수들을 정리한다.
멤버 접근 함수
vector.at(), vector[index]
두 함수 모두 인자로 전달된 인덱스 값의 원소의 레퍼런스를 리턴한다. at의 경우 입력된 인자가 범위를 벗어났으면 예외를 throw한다.
vector.front(), vector.back()
각각 벡터의 첫 번쨰 원소와 마지막 원소를 반환한다.
크기 관련
vector.data()
해당 벡터의 시작 주소 값을 반환한다.
vector.size()
벡터에 담긴 원소의 개수를 반환한다
vector.reserve()
벡터의 크기를 미리 확보한다. 후에 vector에 많은 양의 데이터가 들어올 경우 메모리 할당->복사->해제의 과정이 든다. 이 과정에서 많은 비용이 들어간다.
그러나 reserve로 미리 크기를 확보해두며 재할당이 필요하지 않게 된다.
vector.capacity()
벡터의 크기를 반환한다. 즉, 공간의 크기를 반환한다.
vector.empty()
벡터가 비어있으면 true, 그렇지 않으면 false 반환
vector.shrink_to_fit()
여분의 메모리 공간을 해제한다. 즉, 벡터의 size와 capacity를 같게 만든다.
삽입 삭제
vector.push_back(a)
마지막 뒤에 원소 a를 삽입한다.
vector.pop_back()
마지막 원소를 제거하고 반환한다.
vector.insert(iterator, x)
iterator : 삽입될 원소의 위치
n : 삽입할 원소의 수
x : 삽입할 원소의 값
vector.clear()
모든 원소를 제거한다. size는 줄어들지만 capacity는 유지된다. 즉 메모리는 그대로 남아있다.(공간은 그대로 남는다.)
vector.erase(iterator)
벡터에서 주소에 해당하는 값을 삭제한다.
반복자(Iterator) 관련
vector.begin(), vector.cbegin()
시작점을 나타내는 반복자를 리턴한다. cbegin의 경우 상수 반복자를 리턴한다.
vector.end(), vector.cend()
요소의 끝을 나타내는 반복자를 리턴한다.
vector.rbegin, vector.crbegin
역참조 반복자의 시작점을 리턴한다.
vector.rend(), vector.crend()
역참조 반복자의 끝점을 리턴한다
각종 함수 사용 간단 예시
벡터의 함수를 사용하는 간단한 예시를 정리한다.
사이즈 변환 1
사이즈 변환 2
요소 Insert
거꾸로 출력
'컴퓨터 > 알고리즘:자료구조' 카테고리의 다른 글
[자료구조] C++트리 설명 및 구현(이진트리)/이진트리 구현 (0) | 2022.11.28 |
---|---|
[자료구조] C++ list자료구조 정리/list 함수/list예시 (0) | 2022.11.03 |
[자료구조] c++ 배열(STL Array)의 각종 사용 방법/동적 할당, 함수 파라미터, 2차원 배열 (0) | 2022.10.02 |
[자료구조] C++ 배열 std::array 정리/함수와 동적 할당 등 (0) | 2022.10.02 |
[알고리즘] 버블 정렬 정리 및 구현 (0) | 2021.11.30 |
댓글