Programming/C++

[STL] vector 생성자, 함수 및 iterator 사용법

이진2 2020. 5. 1. 00:53

C++에서 사용되는 벡터(vector)는 배열과 유사한 자료구조지만 자동 크기 조절과 객체의 추가 삭제를 제공한다

크기가 가변적이거나 객체의 추가 및 삭제가 자주 일어날 때, 동적인 상황에서 자주 사용한다😲

 

사용 시 <vector>헤더 파일을 추가하고, using namespace std;를 표기해주어야 한다

vector<data-type> var_name 으로 선언한다

 

생성자
  • vector v : 빈 vector 생성
  • vector v (n) : 기본값으로 초기화된 n개의 원소를 가진 vector 생성
  • vector v (n, x) : x값으로 초기화된 n개의 원소를 가진 vector 생성
  • vector v (v2) : v2 vector의 복사본 생성

 

자주쓰는 멤버함수
  • v.assign(n, x) : v에 x값으로 n개의 원소 할당
  • v.at(i) : i번째 원소 참조( = v[i]와 쓰임이 같으며, 해당 벡터의 원소를 반환)
  • v.push_back(x) : 벡터의 마지막에 x 삽입
  • v.pop_back() : 벡터의 마지막 원소 삭제
  • v.front() : 맨 처음 원소 참조
  • v.back() : 마지막 원소 참조
  • v.clear() : 모든 원소를 제거(메모리는 유지)
  • v.size() : 벡터의 원소 개수 반환
  • v.empty() : v가 비었는지 반환(비었다면 1 return)

 

iterator는 벡터의 객체를 가리키는 반복자 형식을 나타낸다. 

주로 vector<data-type>::iterator name 으로 선언한다

 

자주쓰는 iterator 이용 함수
  • v.begin() : 첫번째 원소를 가리키는 iterator 반환
  • v.end() : 마지막의 다음 iterator 반환(ex. n-1개가 들어있는 vector라면 n번째를 반환)
  • v.insert(p, x) : p(iterator)가 가리키는 위치에 x값을 삽입하고 그 위치의 iterator 반환(인자가 iterator p,b,e 세 가지일 경우 p가 가리키는 위치의 iterator 구간 [b,e) 원소를 삽입)
  • v.erase(p) : p(iterator)가 가리키는 위치의 원소를 제거 후 다음 위치의 iterator 반환(인자가 iterator b,e 두 가지인 경우 [b,e) 구간의 원소를 제거)

 

+ vector의 size와 capacity의 차이점 👉 size는 벡터에 들어간 원소의 개수, capacity는 벡터에 할당된 공간의 크기를 나타낸다. 따라서 capacity는 2^n의 값을 가진다.

 

 

사용 예제 : 

#include <iostream>
#include <vector>
using namespace std;
int main() {
	vector<int> v;
	v.assign(5, 0);	//0,0,0,0,0 할당

	for (int i = 0; i < v.size(); i++)
		cout << v.at(i) << ' ';	
	cout << '\n';

	v.clear();
	if (v.empty())	//clear했기 때문에 1반환
		cout << "Empty\n";

	for (int i = 1; i <= 6; i++)
		v.push_back(i);	//1~6까지의 원소 삽입
	v.pop_back();	//마지막 원소 제거(6)

	cout << "Front: " << v.front()<<'\n';
	cout << "Back: " << v.back() << '\n';
	//처음과 마지막 원소 출력

	return 0;
}

결과👻 : 

0 0 0 0 0
Empty
Front: 1
Back: 5

 

사용예시2: 

#include <iostream>
#include <vector>
using namespace std;
int main() {
	vector<int> v;
	for (int i = 1; i <= 6; i++)
		v.push_back(i);	//1~6까지의 원소 삽입

	vector<int>::iterator it;
	for (it = v.begin(); it != v.end(); it++)
		cout << *it << ' ';
	cout << '\n';
	//iterator를 이용한 원소 출력

	it = v.begin() + 2;
	v.insert(it, 0);	//3번째 원소 위치에 0 삽입
	it = v.begin() + 3;
	v.erase(it);	//4번째 원소 삭제(3)

	for (it = v.begin(); it != v.end(); it++)
		cout << *it << ' ';
	cout << '\n';

	return 0;
}

결과🧚‍♀️ :

1 2 3 4 5 6
1 2 0 4 5 6