(1) Vector란?
Vector는 C++ 표준 라이브러리(Standard Template Library)에 있는 컨테이너로 사용자가 손쉽게 사용하기 위해 정의된 class입니다. Vector의 가장 큰 장점은 동적으로 원소를 추가할 수 있으며 크기가 자동으로 늘어난다는 점입니다. 쉽게 말해 크기가 가변적으로 변하는 배열이라고 할 수 있습니다. 속도적인 측면에서는 배열에 비해 떨어지지만 메모리를 효율적으로 관리할 수 있다는 장점이 있어 굉장히 많이 사용합니다. vector는 배열과 마찬가지로 원소들이 하나의 메모리 블록에 연속하게 저장됩니다. 그렇기에 원소가 추가되거나 삽입될 때 메모리 재할당이 발생할 수 있고 상당한 부하가 발생하게 된다는 점은 단점으로 꼽히고 있습니다.
(2) Vector 구조
vector를 생성하면 메모리 heap에 생성되며 동적 할당됩니다.
front() : 첫 번째 원소
back() : 마지막 원소
begin() : 첫번째 위치
end() : 마지막의 다음 위치
size() : 원소의 개수
capacity() : 할당된 공간의 크기
size와 capacity가 따로 있는 이유
매번 새로운 원소가 들어올 때마다 새로운 메모리가 할당되는 것은 비효율적입니다. 그렇기에 vector는 새로운 원소가 벡터에 추가되면 메모리 공간을 추가적으로 할당되는 방식으로 이루어져 있습니다. 좀 더 정확하게는 capacity가 모자랄 경우 capacity/2 만큼의 capacity를 늘려나가게 됩니다. 만약 입력될 원소의 개수를 알 수 있다면 reserve를 사용하여 미리 capapcity 메모리를 할당해 놓으면 좀 더 호율적으로 vector를 사용할 수 있습니다.
(3) Vector 사용법
- vector Container를 사용하기 위한 헤더
#include <vector>
- Vector <T> 변수명 : T자료형을 가진 Vector 변수명을 선언
vector<int> _Vector
- push_back(const T& x) : 벡터 끝에 원소를 추가
- pop_back : 벡터의 마지막 원소를 삭제
- insert(iterator position, const value_type& val) : position에 val를 삽입
- erase(iterator position) : position에 위치한 값 삭제
_Vector.push_back(10); // 벡터의 끝에 10값을 삽입
_Vector.pop_back; // 벡터의 마지막 원소 삭제
_Vector.insert(3,10); // 3번째에 10 삽입 //_Vector.insert(i,val)
_Vector.erase(3); // 3번째값 삭제 //_Vector.erase(i)
- begin() : 벡터의 시작 원소를 가리키는 반복자를 반환
- end() : 벡터의 끝 표시 반복자를 반환
- at() : 벡터의 n에 있는 원소를 반환
_Vector.begin();
_Vector.end();
_Vector.at(i);
'Study > C++' 카테고리의 다른 글
[STL] Next_permutation 함수 (C++) (0) | 2020.11.27 |
---|---|
[TCP] TCP - Server (2) | 2020.11.06 |