상황파악

C++ - Vector 벡터란? 본문

C++

C++ - Vector 벡터란?

otch80 2021. 1. 11. 02:41

C++에서 사용하는 가변 배열, 생성 시 heap에 동적할당

 

장점 : 편함

단점 : 삽입시 메모리 재할당으로 부하 발생

 

 


구조

front() 첫번째 원소
back() 마지막 원소
begin() 첫번째 위치
end() 마지막의 다음 위치
size() 원소의 개수
capacity() 할당된 공간의 크기

 

 

capacity가 있는 이유?

추가 공간이 필요할때 마다 하나씩 늘리는 것은 비효율적

capacity/2 만큼 공간을 늘려서 반복작업의 수를 감소시킴

 

 

 

 

초기화 방법

#include <vector>
vector<int> v;					// int 타입 벡터 생성
vector<int> v = {1,2,3};			// 벡터 생성 후 값 1,2,3 초기화
vector<int> v[100];				// 크기 100의 벡터 배열 생성
vector<int> v[] = {{1,2},{3,4}};		// 2차원 벡터 생성 (행은 가변 열은 고정)
vector<vector<int>> v;				// 2차원 벡터 생성 (행,열 모두 가변)
vector<int> v(10);				// 10개 원소 0으로 초기화
vector<int> v(10,1);				// 10개 원소 1로 초기화
vector<int> v2(V);				// v2 생성 및 복사

기본틀 : vector <[data type]> [변수이름]

 

 

 

 

 

사용방법

// 값 할당
v.assign(5,2);				// 값을 2로 5개 원소 할당
v.reserve(n);				// n개의 원소를 저장할 위치를 예약 (미리 동적할당 받기)
v.resize(n);				// 크기를 n으로 변경, 더 커졌을 경우 0으로 초기화
v.resize(n,m);				// 크기를 n으로 변경, 더 커졌을 경우 m으로 초기화
v.insert(2,3);				// 2번째 위치에 3을 삽입, 삽입한 곳의 iterator 반환


// 참조
v.front();				// 첫번째 원소 참조
v.begin();				// 첫번째 원소를 가리킴, iterator 사용
v.at(index);				// index번째 원소 참조 v[index]보다 느리지만 범위를 점검하므로 안전
v.back();				// 마지막 원소 참조
v.push_back(10);			// 마지막에 10 추가
v.end();				// 마지막 다음 가리킴, iterator 사용
v.rbegin();				// 거꾸로 해서 첫번째 원소 가리킴, iterator 사용
v.rend();				// 거꾸로 해서 마지막의 다음을 가리킴, iterator 사용

// 값 제거
v.pop_back();				// 마지막에 넣은 값 제거
v.erase(iterator);			// iterator가 가리키는 원소 제거, size만 감소
v.erase(vec.begin(), vec.begin()+5);	// index 0~5 제거 (범위지정)
v.clear();				// 벡터 비우기, 메모리는 남아있음, size만 줄어듬
v.empty();				// size가 0이면 (vector가 비었으면) true반환

// 그 외
v.size();				// 원소 개수
v.capacity();				// 할당된 공간 크기
v2.swap(v1);				// v1이랑 v2 원소와 capacity 변경 

 

반복문으로 값 확인 방법

for (int i = 0; i < v.size(); i++) // int 대신 auto를 사용해도 좋다
  cout << v[i] << " ";

 

 

Iterator 활용 값 확인 방법

 for (auto i = v1.begin(); i != v1.end(); ++i) 
    cout << *i << " ";

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

C++ 최대값 최소값  (0) 2021.01.12
C++ 자리수 출력  (0) 2021.01.11
C++ vector 정렬 sort  (0) 2021.01.11
C++ vector 요소 합 acculmulate  (0) 2021.01.11