본문 바로가기

Lang/C++

[C++] STL Vector

728x90

# 헤더

#include <vector>

 

# 생성자

#include <iostream>
#include <string>
#include <vector>
using namespace std;

void main()
{
	vector<string> v1;	// 디폴트 생성자. 비어있음.
	vector<double> v2(10);	// 10칸짜리 double형 배열.
	vector<int> v3(10, 7);	// 10칸 7로 채워진 int형 배열.
	vector<int> v4(v3);	// v3를 복사하여 생성된 배열.
    
	int arr[] = {1,2,3,4,5,6,7,8,9};
	vector<int> v5(&arr[2], &arr[5]);	// arr[2] ~  arr[4] 를 복사하여 생성된 배열.
    
	vector<int> vArr[3];	// ()가 아닌 []로 생성하면 vector배열이 3개가 생성된다.
	vArr[0].push_back(1);	
	vArr[0].push_back(2);	
	vArr[1].push_back(10);	
	vArr[2].push_back(12);
	vArr[3].push_back(100);
    
	vector<pair<int, int> > vPair;	// pair형 벡터도 가능합니다.
	vPair.push_back({5,6});
}
각 벡터의 값
v1 = {};
v2 = {0,0,0,0,0,0,0,0,0,0};
v3 = {7,7,7,7,7,7,7,7,7,7};
v4 = {7,7,7,7,7,7,7,7,7,7};
v5 = {3,4,5};

vArr[0][0] = 1;
vArr[0][1] = 2;
vArr[1][0] = 10;
vArr[1][1] = 20;
vArr[2][0] = 100;

vPair[0].first = 5;
vPair[0].second = 6;

 

# vector 멤버 함수::용량 함수

함 수 설 명
size 사용중인 요소 개수를 조사한다.
capacity 확보해 놓은 요소 개수를 구한다.
size(실 사용중인 크기) <= capacity (사용 예정 공간까지 더한 크기)
resize(n) 크기를 변경한다.
새로운 크기가 더 클 경우 기존 내용은 유지되고, 새로운 요소는 0으로 초기화된다.
reserve(n) 벡터가 사용할 메모리 공간을 미리 확보해 놓는다.
새로운 크기가 더 클 경우 기존 내용은 유지되고, 새로운 요소는 초기화되지 않는다.
empty 벡터가 비어 있는지 조사한다.
#include <iostream>
#include <vector>
using namespace std;

void main()
{
     vector<int> vi;

     printf("size = %d, capacity = %d\n",vi.size(),vi.capacity());

     vi.push_back(123);
     vi.push_back(456);
     printf("size = %d, capacity = %d\n",vi.size(),vi.capacity());

     vi.resize(10);
     printf("size = %d, capacity = %d\n",vi.size(),vi.capacity());

     vi.reserve(20);
     printf("size = %d, capacity = %d\n",vi.size(),vi.capacity());

}
size = 0, capacity = 0
size = 2, capacity = 2
size = 10, capacity = 10
size = 10, capacity = 20

 

# Vector 멤버 함수::삽입과 삭제

함수 설명
push_back(n) 벡터 끝에 새로운 요소 n을 추가한다.
pop_back() 벡터 마지막 요소의 값을 리턴하고 요소를 삭제한다.
insert(iterator it, n) 벡터의 it이 가리키는 위치에 요소 n을 끼워넣는다.
erase(iterator it) 벡터의 it이 가리키는 위치의 요소를 삭제한다.
front() 첫 번째 요소에 접근한다.
operator[i] i 번째 요소에 접근한다. 예외처리없음.
at(i) i 번째 요소에 접근한다. 예외처리 발생.
back() 마지막 요소에 접근한다.
clear() 벡터의 모든 요소를 삭제한다.
swap(v2) 다른 벡터 v2와 요소를 전부 교환한다.
#include <stdio.h>
#include <vector>
using namespace std;

int main(){
	vector<int> v;		// 비어있는 벡터 생성
	
	for(int i=0; i<10; i++)
		v.push_back(i);		// 벡터에 0 ~ 9까지 추가

	for(int i=0; i<v.size(); i++)
		printf("%d ", v[i]);	// 벡터 요소를 출력해본다
	printf("\n");

	vector<int>::iterator it = v.begin();	// 반복자를 선언하고 벡터의 첫 요소를 가리킨다
	
	// 반복자는 +, -, ++, --를 이용해 벡터 요소를 이동하며 가리킬 수 있다.
	// 첫 요소는 v[0]인 셈이므로 it+2를 하면 v[2]를 가리키는 것
	// 즉 v[2]에 8을 대입하고 그 이후 요소를 뒤로 이동시킨다
	v.insert(it+2, 8);		
			
	for(int i=0; i<v.size(); i++)
		printf("%d ", v[i]); // insert 이후 벡터 요소를 출력해본다
	 
	return 0;
}
0 1 2 3 4 5 6 7 8 9
0 1 8 2 3 4 5 6 7 8 9

 

# vector 2차원 배열 선언

#include <vector>

// arr[n][m] = {0}; 의 형태로 선언
vector<vector<int>> arr(n, vector<int>(m, 0));

// 컴파일러에 따라 에러가 날 경우
// 아래처럼 vector<vector<int>와 > arr(... 사이를 한 칸 띄우면 해결된다.
vector<vector<int> > arr(n, vector<int>(m, 0));

 

728x90

'Lang > C++' 카테고리의 다른 글

[C++] 컨테이너 어댑터 Stack  (0) 2022.12.07
[C++] STL 연관 컨테이너 Map  (0) 2022.12.01
[C++] 구조체를 확장하면? 클래스!  (0) 2022.11.24