[STL] vector container

9231 단어 stlcppcpp

c++의 표준 라이브러리(Standard Template Library)에 있는 컨테이너이다.

vector를 생성하면 heap에 동적할당된다.

배열과 마찬가지로 삽입, 삭제가 빈번하다면 비효율적이다.

1. vector 사용방법

vector 헤더파일 추가한다.

#include <vector>
using namespace std;

2. vector의 구조

3. vector 생성

vector 객체를 생성 시, <>안에 type을 지정한다.

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

4. 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) 원소 접근

해당 위치 원소의 값을 return 한다.

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

4) Iterators

해당 위치 원소의 참조를 return 한다.
end()는 마지막 원소의 다음 위치를 가리킨다.

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

활용예시 - 벡터의 모든 원소 출력

vector<int>::iterator it;

for(it = v.begin(); it!=v.end(); it++) cout << *it << endl;

5) 벡터 용량

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

size()와 capacity()의 차이

capacity는 vector의 type을 담을 수 있는 메모리가 할당되어 있는 공간의 용량,
size는 실제 유효한 원소의 갯수이다.

새로운 원소 추가 시,

  • capacity > size이면,
    맨 뒤 공간에 원소 복사 -> ++size
  • capacity == size이면,
    capacity가 증가한 새로운 공간 할당
    -> 기존의 원소 복사 & 기존 원소 삭제


참고
블로그1 https://hwan-shell.tistory.com/119
블로그2 https://blockdmask.tistory.com/70

좋은 웹페이지 즐겨찾기