[STL] Vector Container

🙈·2022년 8월 17일
0

[PL] C++

목록 보기
4/4
post-thumbnail

C++로 문제를 풀다보면 vector를 사용하는 풀이 방법을 빈번하게 볼 수 있다. 따라서 이번에 vector 컨테이너에 대해 정리해보려고 한다!

1. Vector Contianer란,

C++ 표준 라이브러리(STL)에 있는 컨네이너이다. vector를 생성하면 heap에 동적 할당되는데, 배열과 마찬가지로 삽입, 삭제가 빈번한 경우 비효율적이다.

2. Vector 사용방법

vector 헤더파일을 추가해주어야 한다.

#include <vector>
using namespace std;

3. Vector 구조

4. Vector 생성

vector 객체를 생성할 때에 <>에 데이터 타입을 지정해야한다.

vector<int> v; // int형 vector v 생성
vector<int> v(3); // 0으로 초기화된 크기가 3인 vector 생성
vector<int> v(3,1); // 1로 초기화된 크기가 3인 vector 생성

5. Vector 멤버 함수

1) 원소 할당

v.assign(3,1); // 원소 3개에 1할당

2) 원소 삽입 및 삭제

v.push_back(5); // 마지막 원소 뒤에 5삽입
v.insert(2,3); // 2번쨰 위치에 3삽입, 삽입한 곳의 iterator 반환
v.pop_back(); // 마지막 원소 삭제
v.erase(iter); // iter가 가리키는 원소 제거
v.clear(); // 모든 원소 제거, 메모리는 남아있음
v.resize(3); // v의 사이즈를 3으로 조절
v.swap(v2); // v와 v2 swap

3) 원소 접근

v.at(3); // v의 3번째 요소 접근(범위검사 => 범위 오류 시 예외처리 발생)
v[3]; // v의 3번째 요소 접근(범위 검사 X)
v.front(); // 벡터의 첫번째 요소 접근
v.back(); // 벡터의 마지막 요소 접근

4) Iterators

해당 위치 원소의 참조를 return한다.

v.begin(); // v 시작점의 주소 값 반환
v.end(); // v 마지막 다음 주소값 반환
v.rbegin(); // v의 끝지점을 시작점으로 반환
v.rend(); // v의 (시작+1)지점을 끝부분으로 반환

※ end()는 마지막 원소의 다음 위치를 가리킨다.

5) 벡터 용량

v.empty(); // v가 빈공간이면 true, 값이 있다면 false
v.size(); // 벡터의 크기 반환
v.capacity(); // heap에 할당된 벡터의 크기

capacity()는 vector의 type을 담을 수 있는 메모리가 할당되어 있는 공간의 용량을 반환하고, size()는 실제 유효한 원소의 개수를 반환한다.

벡터에 새로운 원소를 추가할 때,

  • capacity > size이면, 벡터의 맨 뒤 공간에 원소 복사한 뒤 size를 1 증가시킨다.
  • capacity == size이면, capacity가 증가한 새로운 공간 할당한 뒤 기존의 원소를 새로 생성한 벡터에 복사한다.

<참조>
https://hwan-shell.tistory.com/119
https://blockdmask.tistory.com/70

profile
개발 일기🌱

0개의 댓글