본문 바로가기
프로그래밍 언어/C++

STL 컨테이터 - Vector

by Nighthom 2023. 2. 14.

<vector> 헤더파일에 정의되어 있음

 

1. 선언 방법

std::vector<Type> vec; // 벡터 선언

2. 벡터의 뒤에 데이터 삽입/삭제

vec.push_back(data); 	// 벡터의 뒤에 데이터 삽입
vec.pop_back();		// 벡터의 뒤에서 데이터 삭제

3. 이터레이터

이터레이터 type : typename std::vector<T>::iterator itr

vec.begin()			// 제일 앞을 가리키는 이터레이터
vec.end()			// 제일 끝을 가리키는 이터레이터(마지막 원소의 한칸 뒤를 가리킴)

vec.cbegin()			// 상수형 이터레이터
vec.cend()

일반적으로는 다음과 같이 사용
for(auto itr:vec) {
	cout << vec << " ";
}

for(auto itr = vec.begin(); itr != vec.end(); i++) {
	// 로직..
}

// 비어 있는 벡터는 다음과 같이 검사할 수도 있다. 
if(vec.begin() == vec.end())

// 하지만 아래 메서드 또한 지원한다.
vec.empty();		// 비어 있으면 true, 아니면 false 반환

4. 참조 방식

인덱스 i인 원소에 접근하는 방법

vec[i];				// 배열처럼 접근
vec.at(i);			// at 메서드를 활용해서 접근
vec.begin() + i;		// 이터레이터를 활용해 접근

vec.front();			// 제일 앞 원소 접근
vec.back();			// 제일 뒤 원소 접근

5. 원하는 위치에 값 추가/삭제

vec.insert(iter, value);	// 삽입
vec.erase(iter);		// 삭제

// 해당 메서드들은 삭제할 위치의 이터레이터를 받는다.
// Insert의 경우 삭제할 value 또한 받음

vec.insert(index, value);
vec.erase(index);
// 해당 메서드는 인덱스를 사용하는 버전이다.

 

활용 방법

// 인덱스 1의 위치 뒤에 원소 2 추가
vec.insert(vec.begin() + 1, 2);

// 인덱스 1의 원소 삭제
vec.erase(vec.begin + 1);

6. 역이터레이터

// 역이터레이터. 역으로 데이터를 참조함.
vec.rbegin();
vec.rend();

// 상수 역이터레이터.
vec.crbegin();
vec.crend();

7. 벡터의 크기

vec.size();

8. 벡터의 크기 재할당

vec.resize(num);

댓글