vector란?
vector란 많이 쓰이는 STL 자료구조 중 하나로, 동적으로 메모리가 할당된 배열이다.
사용자가 직접 메모리를 동적 할당한 배열 (int* arr = new int[n])과는 달리 요소 수가 증가하거나 감소하면 메모리가 자동으로 늘어나고 줄어들어 메모리를 매우 효율적으로 관리할 수 있다. 또한 일반 배열처럼, 인덱스를 이용하여 모든 위치에 접근이 가능하다.
1. 헤더파일
#include <vector>
using namespace std;
vector를 사용하기 위해서는 <vector> 헤더파일을 include시켜주어야 한다.
STL vector는 std namespace에 있기 때문에 cout, cin을 사용할 때와 같이 using namespace std;를 추가해주면 편리하다.
2. vector 선언하기
1) 기본 선언 방법
vector <데이터 타입> 이름; ex) vector<int> v;
2) 크기를 지정하여 선언
vector <데이터 타입> 이름(크기); ex) vector<int> v(5);
3) 크기와 초기값을 지정하여 선언
vector <데이터 타입> 이름(크기, 초기값); ex) vector<int> v(5, 0);
3. vector 원소 접근하기
v.size(); | 벡터 v의 크기 반환 |
v.front(); | 벡터 v의 처음 값 반환 |
v.back(); | 벡터 v의 마지막 값 반환 |
v[k]; | 인덱스 k 위치에 해당하는 값 반환 |
v.at(k); | 인덱스 k 위치에 해당하는 값 반환 |
v.begin(); | 처음 데이터의 위치 (인덱스 값) |
v.end(); | 마지막 데이터의 다음 위치 (=벡터의 마지막 원소의 인덱스 값 + 1) |
4. 원소 삽입
v.push_back(n); | 벡터 v의 마지막에 n을 삽입 |
v.insert(v.begin() + k, n); | 벡터 v의 인덱스 k 위치에 n을 삽입 |
insert에서 위치를 지정할 때 v.begin() + k의 형식으로 써야 오류가 나지 않는다!
5.원소 삭제
v.pop_back(); | 벡터 v의 마지막 값 삭제 |
v.erase(v.begin() + k); | 벡터 v의 인덱스 k 위치에 해당하는 원소 삭제 |
v.clear(); | 벡터 v의 모든 원소 삭제 |
마찬가지로 erase에서 위치를 지정할 때 v.begin() + k의 형식으로 써야 오류가 나지 않는다!
6. iterator를 이용하여 모든 원소 접근 & 출력하기
vector<int> v;
v.push_back(1); //v의 맨 끝에 1 삽입
v.push_back(2); //v의 맨 끝에 2 삽입
v.insert(v.begin()+2,3); //v의 begin위치로부터 2만큼 떨어진 곳에 3 삽입
v.insert(v.begin()+3,4); //v의 begin위치로부터 3만큼 떨어진 곳에 4 삽입
//방법 1
for (auto it : v) {
cout << it << "\n";
}
cout << "\n";
//방법 2
for (auto it = v.begin(); it < v.end(); it++) {
cout << *it << "\n";
}
for (auto it : v) {
if(it%2 == 0)
cout << it << "\n";
}
위와 같이 auto와 iterator를 이용하여 짝수인 원소만 출력하거나, 이 이외에도 다양하게 조건을 걸어 벡터를 활용할 수 있다.
'C++' 카테고리의 다른 글
[C++] - int → string 으로 형변환하기 (1) | 2024.01.10 |
---|---|
[C++] - vector를 2차원으로 사용하기 (STL) (1) | 2024.01.08 |
[C++] - sort()함수 사용법 정리(STL) (1) | 2024.01.02 |
[C++] - map 사용법 정리 (STL) (1) | 2023.12.30 |
[C++] - STL(표준 템플릿 라이브러리)에 대하여 (1) | 2023.12.28 |