벡터(std::vector)는 동적 배열 구조를 C++로 구현한 것이다. 이것은 C의 배열(빠른 랜덤 접근이 가능한)처럼 행동하지만 자동으로 배열의 크기 조절과 객체의 추가와 삭제가 가능하다.
벡터는 C++ 표준 템플릿 라이브러리 중의 하나인 템플릿 클래스이다. 어떤 타입이라도 저장할 수 있지만, 한 번에 한 타입만 저장이 가능하다. 요소에 접근하거나, 앞 또는 뒤에 요소를 추가하거나 삭제할 수 있고 크기를 알 수 있는 멤버 함수를 제공하고 있다.
C++의 배열은 메모리에서 연속적이다. 이것은 하나의 타입을 가지는 블록이 여러 개가 붙어 있는 것처럼 생각할 수 있다. 배열의 모든 요소는 같은 타입을 가져야만 한다.
벡터는 배열과 비슷하지만 확장된 기능을 가지고 있다. 벡터의 특징 중 하나는 at()이란 함수를 사용한다면, 존재하지 않는 요소에 접근하려 할 때 범위 에러를 발생할 것이다. 벡터는 템플릿 클래스이기 때문에, 원하는 모든 타입의 일반적인 배열(generic array)을 만들 수 있다. 이것은 벡터의 유용성을 매우 크게 하기 때문에, 모든 것을 배열처럼 사용할 수 있게 한다. 예를 들어, 벡터의 벡터를 만들 수 있다.
벡터는 무조건 데이터를 선형적으로 만들려고 한다. 만약 저장 공간보다 많은 양의 데이터를 추가시킬 경우에는, 현재 보유하고 있는 메모리의 두 배만큼을 할당하기 때문에 단순한 추가 할당으로는 선형적인 공간을 만들어내지 못하는 경우가 있을 수 있다. 이럴 때는 선형적인 다른 공간에 모든 원소를 하나하나 복사하기 때문에 속도가 느려진다.
template < class T, class Alloc = allocator<T> > class vector;
[출처] 위키백과 - 벡터 (STL)
[출처] cplusplus.com - std::vector
멤버 함수 | 동작 | 관련 문제 |
size | 벡터의 크기 return | |
push_back(element) | 벡터의 끝 지점에 원소 추가 | |
push_front(element) | 벡터의 시작 지점에 원소 추가 | |
emplace_back(element) | ||
vector.erase(vector.begin() + int index) | 지정된 위치의 원소 제거 | |
at(index) | 지정된 위치의 원소 확인 | |
unique(vector.begin(), vector.end()) | [백준] 1268번: 대칭 차집합 | |
set_intersection(vec1.begin(), vec1.end(), vec2.begin(), vec2.end(), back_inserter(vecIntersection)) | 벡터 vec1과 벡터 vec2의 중복 원소를 vecIntersection에 저장 | [백준] 1268번: 대칭 차집합 |
'Study > C_C++' 카테고리의 다른 글
연산자 (0) | 2023.06.15 |
---|---|
표준 템플릿 라이브러리 (STL) (0) | 2023.06.13 |
형 변환 (0) | 2023.06.07 |
VS Code (with Windows) (0) | 2018.07.29 |
댓글