-
[STL] vector 생성자, 함수 및 iterator 사용법Programming/C++ 2020. 5. 1. 00:53
C++에서 사용되는 벡터(vector)는 배열과 유사한 자료구조지만 자동 크기 조절과 객체의 추가 삭제를 제공한다
크기가 가변적이거나 객체의 추가 및 삭제가 자주 일어날 때, 동적인 상황에서 자주 사용한다😲
사용 시 <vector>헤더 파일을 추가하고, using namespace std;를 표기해주어야 한다
vector<data-type> var_name 으로 선언한다
생성자
- vector v : 빈 vector 생성
- vector v (n) : 기본값으로 초기화된 n개의 원소를 가진 vector 생성
- vector v (n, x) : x값으로 초기화된 n개의 원소를 가진 vector 생성
- vector v (v2) : v2 vector의 복사본 생성
자주쓰는 멤버함수
- v.assign(n, x) : v에 x값으로 n개의 원소 할당
- v.at(i) : i번째 원소 참조( = v[i]와 쓰임이 같으며, 해당 벡터의 원소를 반환)
- v.push_back(x) : 벡터의 마지막에 x 삽입
- v.pop_back() : 벡터의 마지막 원소 삭제
- v.front() : 맨 처음 원소 참조
- v.back() : 마지막 원소 참조
- v.clear() : 모든 원소를 제거(메모리는 유지)
- v.size() : 벡터의 원소 개수 반환
- v.empty() : v가 비었는지 반환(비었다면 1 return)
iterator는 벡터의 객체를 가리키는 반복자 형식을 나타낸다.
주로 vector<data-type>::iterator name 으로 선언한다
자주쓰는 iterator 이용 함수
- v.begin() : 첫번째 원소를 가리키는 iterator 반환
- v.end() : 마지막의 다음 iterator 반환(ex. n-1개가 들어있는 vector라면 n번째를 반환)
- v.insert(p, x) : p(iterator)가 가리키는 위치에 x값을 삽입하고 그 위치의 iterator 반환(인자가 iterator p,b,e 세 가지일 경우 p가 가리키는 위치의 iterator 구간 [b,e) 원소를 삽입)
- v.erase(p) : p(iterator)가 가리키는 위치의 원소를 제거 후 다음 위치의 iterator 반환(인자가 iterator b,e 두 가지인 경우 [b,e) 구간의 원소를 제거)
+ vector의 size와 capacity의 차이점 👉 size는 벡터에 들어간 원소의 개수, capacity는 벡터에 할당된 공간의 크기를 나타낸다. 따라서 capacity는 2^n의 값을 가진다.
사용 예제 :
#include <iostream> #include <vector> using namespace std; int main() { vector<int> v; v.assign(5, 0); //0,0,0,0,0 할당 for (int i = 0; i < v.size(); i++) cout << v.at(i) << ' '; cout << '\n'; v.clear(); if (v.empty()) //clear했기 때문에 1반환 cout << "Empty\n"; for (int i = 1; i <= 6; i++) v.push_back(i); //1~6까지의 원소 삽입 v.pop_back(); //마지막 원소 제거(6) cout << "Front: " << v.front()<<'\n'; cout << "Back: " << v.back() << '\n'; //처음과 마지막 원소 출력 return 0; }
결과👻 :
0 0 0 0 0
Empty
Front: 1
Back: 5사용예시2:
#include <iostream> #include <vector> using namespace std; int main() { vector<int> v; for (int i = 1; i <= 6; i++) v.push_back(i); //1~6까지의 원소 삽입 vector<int>::iterator it; for (it = v.begin(); it != v.end(); it++) cout << *it << ' '; cout << '\n'; //iterator를 이용한 원소 출력 it = v.begin() + 2; v.insert(it, 0); //3번째 원소 위치에 0 삽입 it = v.begin() + 3; v.erase(it); //4번째 원소 삭제(3) for (it = v.begin(); it != v.end(); it++) cout << *it << ' '; cout << '\n'; return 0; }
결과🧚♀️ :
1 2 3 4 5 6
1 2 0 4 5 6'Programming > C++' 카테고리의 다른 글
Vector Capacity를 1.5배씩 늘려주는 이유 (420) 2021.01.05 [C++] Dijkstra Algorithm with Priority Queue (395) 2020.05.07 [C++] memset과 fill의 차이/2차원 배열 초기화 함수 (419) 2020.05.02 C/C++ 데이터 형식 범위(int, double, long long 범위) (2) 2020.04.30 C언어 처음 시작하기 (403) 2019.02.03