[C_C++]이론 공부/이론+STL

[C++ STL] vector(벡터) 공부

코딩굼벵이 2021. 6. 14. 19:21
728x90

STL : 표준 템플릿 라이브러리; Standard Template Library

 

사용하려면 #include <vector>가 필요하다.

 

C++에서는 동적 배열 구조를 vector로 구현할 수 있다.

vector<string> vec, vector<int> vec처럼 선언해주면 자동으로 배열의 크기 조절과 객체의 추가, 삭제가 가능하다. 단, 한번에 한 타입만 저장이 가능하다.

요소에 접근하거나, 앞 or 뒤에 요소를 추가/삭제하거나, 크기를 알 수 있는 멤버 함수 등을 제공한다.

 

다음은 vector를 이용해 문자열을 추가, 삭제해 각각 출력하는 코드다.

 

#include <iostream>
#include <string>
#include <vector> // vector 헤더파일 추가

using namespace std;

int main() {
	vector<string> vec; // 비어있는 벡터 생성

	vec.push_back("벡터는 ");
	vec.push_back("이렇게 ");
	vec.push_back("씁니다."); 

	for (int i = 0; i < vec.size(); i++) {
		cout << vec[i] << endl; // vec.at(i)도 가능
	}

	vec.pop_back(); // 맨 뒤에 원소 제거

	cout << "\n";
	for (int i = 0; i < vec.size(); i++) {
		cout << vec.at(i) << endl;
	}
	return 0;
}

출력 결과

 

vector의 메소드와 사용방법은 다음과 같다.

메소드 설명
at 특정 위치 원소의 참조를 반환
vec.at(1) == vec[1] 이다.
push_back / pop_back 마지막에 원소를 추가 / 삭제
insert 특정 위치에 원소 삽입
<사용 예시>
v.insert(v.begin()+1, "hi"); //처음 원소 다음에 hi 삽입
front / back 첫번째 / 마지막 원소의 참조를 반환
begin / end 첫번째 원소의 랜덤 접근 반복자를 반환 /
마지막 원소 다음의 반복자를 반환

for문에서 초기조건, 종료조건처럼 쓰인다.
<사용 예시>
vector<string>::iterator vi;
for(vi = vec.begin(); vi != vec.end(); vi++)
cout << *vi << endl; // vec 배열 원소 차례로 반환
rbegin / rend 역방향으로 첫 원소의 반복자를 반환 /
역방향으로 마지막 원소 다음의 반복자를 반환

<사용 예시>
vector<string>::reverese_iterator vi;
for(vi = vec.rbegin(); vi != vec.rend(); vi++) ...
assign 특정 원소로 채움(이전 데이터는 저장하지 않음)
초기화 용도
reserve 지정된 크기의 저장 공간을 확보
v.reserve(100); //100칸 확보
size 원소 개수 반환
<사용 예시>
vector<string>::size_type cnt;
cnt = v.size();
clear 모든 원소를 삭제
erase 특정 위치의 원소나 지정 범위의 원소를 삭제
(매개변수는 iterator)
<사용예시>
v.erase(v.begin(), v.end()); //clear와 똑같이 동작
swap 각 벡터의 원소(들)를 서로 바꾼다.