본문 바로가기
Study/C_C++

벡터 (vector)

by 꼬부기가우는소리 2023. 6. 17.
728x90

 

벡터(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

댓글