vector
cppreference 왈: 동적 크기 배열을 캡슐화하는 시퀀스 컨테이너
크기가 동적으로 변하는 배열이라고 생각하면 편하다.
배열을 선언할 때는 크기를 지정하지만, 벡터는 크기를 지정하지 않아도 값을 추가하고 삭제함에 따라 크기가 동적으로 변한다.
사용
좋은 경우
- 데이터가 적을 때
- 검색 횟수가 적을 때
- 랜덤 접근이 필요할 때
지양
- 데이터의 개수가 가변적일 때
- 중간의 삽입 삭제가 많을 때
시간 복잡도
- 임의 액세스 - 상수 O(1)
- 끝에 요소 삽입 또는 제거 - O(1)
- 중간에 요소 삽입 또는 제거 - O(n)
vector 사용 code
헤더 & namespace
#include <vector>
using namespace std;
선언
vector<type> name;
name이라는 이름의 벡터 생성
vector<type> name(n);
n 크기의 벡터 생성
자주 사용하는 함수
자주 사용하는 함수는 PS를 진행하며 느낀 바를 바탕으로 작성하였습니다.
데이터 추가
vt.push_back(Type t);
마지막 원소 뒤에 해당 값을 추가
vt[i] = value;
i번째 인덱스에 value 값 추가
데이터 접근
vt.at(index);
& vt[index];
index 위치의 값 참조
vt.front();
& vt.back();
첫 번째, 마지막 원소 참조
크기 정보
vt.size();
벡터의 크기 반환
vt.empty();
벡터가 비어있는지를 boolean 값으로 반환
데이터 수정
vt[i] = value;
i번 인덱스의 값을 value 값으로 변경
vt.erase(vt.begin());
첫 번째 원소 삭제
vt.erase(vt.begin() + 2, vt.begin() + 5);
index 2부터 5까지이 원소 삭제
vt.insert(index, value);
index에 value 값 추가 → 기존에 존재하는 뒤의 값들은 하나씩 뒤로 이동
vt.insert(index, number, value)
index에 number개 만큼의 value 추가
예시
#include <vector>
using namespace std;
vector<int> vt;
vt.push_back(3);
vt[1] = 2;
// 현재 vector -> [3, 2]
vt[1] = 5;
// 현재 vector -> [3, 5]
vt.insert(1, 4)
// 현재 vector -> [3, 4, 5]