vector
자동으로 메모리가 할당되는 배열이다. 동적 배열에 속하는 string 클래스와 유사하다.
배열처럼 쓰지만 array처럼 최대 크기가 정해져 있는 것이 아닌, 필요에 따라 크기를 세팅할 수 있고, 데이터를 마지막에 추가하거나 중간에 삽입할 수도 있는 (확장되는) 배열이다.
가능한 최대 경우에 맞추어 크기를 할당해야 하는 배열에 비해 메모리를 효율적으로 쓸 수 있다.
템플릿이기 때문에 '모든' (int, float, char 등의 타입은 당연하고, struct까지 가능) 형식으로 데이터를 넣을 수 있다.
사용법
⚠️ vector을 사용하기 위해서는 vector 헤더 파일을 포함해야 한다 ⚠️
⚠️ std 이름 공간의 일부이기 때문에 헤더파일 추가부분 아래에 using namespace std; 또는 std::vector을 사용해야 한다 ⚠️
1
2
|
#include <vector>
using namespace std;
|
cs |
1
2
|
vector <int> v;
vector <데이터 타입> 변수이름;
|
cs |
🟣생성하는 방법
- vector <int> v; ➡️ 비어있는 vector v 생성
- vector <int> v(10); ➡️ 0으로 초기화된 길이 10의 vector v 생성
- vector <int> v(10, -1); ➡️ -1로 초기화된 길이 10의 vector v 생성
- vector <int> vCopy(v); ➡️ v를 복사한 vCopy vector 생성
vector 멤버함수
🔹 v[idx];
v의 idx번째 위치의 데이터 참조. 배열과 비슷한 사용
🔹 v.at(idx);
v의 idx번째 위치의 데이터 참조
🔹 v[idx];
보다 느린 방법이지만, 범위 초과를 방지하는 점검을 거침
🔹v.front();
v의 첫 번째 데이터를 참조
🔹v.back();
v의 마지막 데이터를 참조
🔹v.begin();
첫 번째 데이터를 가리킴. 포인터와 비슷한 iterator
🔹v.end();
마지막 데이터의 다음을 가리킴. 포인터와 비슷한 iterator
🔹v.rbegin();
거꾸로 begin 위치의 데이터를 가리킴. 즉 마지막 원소를 가리킴. iterator
🔹v.rend();
거꾸로 end 위치를 가리킴. 즉 첫 번째 원소의 이전 위치를 가리킴. iterator
🔹v.push_back(5);
마지막 데이터 뒤에 데이터 5를 삽입
🔹v.pop_back();
마지막 원소 제거
🔹v.clear();
모든 원소 제거
🔹v.reserve(n);
n개의 데이터를 저장할 수 있는 공간을 동적할당으로 예약
🔹v.resize(n);
v의 크기를 n으로 변경. 원래 크기보다 작아지는 경우엔 뒤에서부터 지워짐. 원래 크기보다 커지는 경우엔 빈자리 0으로 초기화
🔹v.resize(n, 5);
v의 크기를 n으로 변경. 원래 크기보다 작아지는 경우엔 뒤에서부터 지워짐. 원래 크기보다 커지는 경우엔 빈자리 5로 초기화
🔹v.size();
데이터 갯수 리턴
🔹v.capacity();
할당된 공간 크기 리턴
🔹v2.swap(v1);
v1과 v2의 모든 것을 교환
🔹v.insert(5, 2);
5번째 위치에 2를 삽입
🔹v.insert(5, 2, 3);
5번째 위치를 시작으로 2를 3개 삽입가운데 끼워넣는 것이므로 전체 size 증가
🔹v.erase(iter);
iterator iter가 가리키는 데이터 삭제. 데이터가 삭제되었으므로 size 감소
🔹v.erase(iter1, iter2);
iter1부터 iter2이전까지 데이터 삭제
🔹v.empty();
v가 비어있으면 true, 비어있지 않으면 false 리턴. 즉 size가 0이면 true.
📝 vector 예제
1
2
3
4
5
6
7
|
#include <vector>
using namespace std;
...
vector<int> vi; // int의 zero 사이즈 배열을 생성
int n;
cin >> n;
vector<double> vd(n); // n개의 더블 배열을 생성
|
cs |
✅ 코드 설명 ✅
➡️ 11 Line vector 객체는 값을 삽입하거나 더할 때 자동으로 크기를 조정하기에 vi가 0의 크기에서부터 시작하는 것은 아무런 문제가 없다.
출처 및 참고 : C++ 기초 플러스 / https://dense.tistory.com
HyunZzang의 프로그래밍 공간 / 함께 공부해요!!
도움이 되셨다면 "좋아요❤️" 또는 "구독👍🏻" 부탁드립니다 :)