Vector
- 표준 라이브러리에 있는 컨테이너로 사용자가 손쉽게 사용하기 위해 정의된 class
- 동적 배열로 구성
- 각 원소들이 선형적으로 배열
- 벡터 컨테이너의 원소를 참조할 때 반복자를 이용해서 순차적 참조 가능
- 처음 원소로부터의 상대적인 거리를 이용하여 접근 가능
- 장점
- 1) 동적으로 원소를 추가
- 2) 크기가 자동적으로 들어남
- 3) 각각의 원소를 원소의 인덱스 값으로 참조 가능
- 4) 임의의 순서로 원소에 접근 가능
- 속도적인 측면에서는 배열에 비해 떨어지지만 메모리를 효율적으로 관리할 수 있다는 장점이 있어 많이 사용
- 배열과 마찬가지로 원소들이 하나의 메모리 블록에 저장
- 단점
- 메모리 재할당이 발생할 수 있고 상당한 부하가 발생됨
- 보통의 배열보다 더 많은 메모리 공간 필요
구조
vector를 생성하면 메모리 heap에 생성되며 동적할당
반복자
- begin : 시작 부분을 가리키는 iterator를 리턴
- end : 끝 부분을 가리키는 iterator를 리턴(마지막 값보다 한 칸 뒤 위치 값)
- rbegin : 역순으로 첫번째를 가리키는 iterator를 리턴
- rend : 역순으로 끝 부분을 가리키는 iterator를 리턴 (마지막 값보다 한 칸 뒤 위치 값)
※ 여기서 iterator는 일종의 포인터로 생각하면 된다. 즉 포인터로 vector 데이터에 접근하는 것이다.
이때 쓰이는 함수들이 begin, end, rbegin, rend이다.
요소 기준
- front() : 첫 번째 요소
- back() : 마지막 요소
- [i] : i번째 요소 반환(범위를 점검 X, at[i]보다 빠름) - 내장배열을 대체할 목적 - 효율적이어야 하기 때문에 범위 점검 X
- at[i] : i번째 요소 반환 (범위를 점검, [i]보다 느림)
위치 기준
- begin() : 첫 번째 위치
- end() : 마지막 다음 위치
크기 기준
- size() : 원소의 개수
- capacity() : 할당된 공간의 크기
사용법
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
// 생성자
vector<int> v1(5); // 0(기본값)으로 초기화 된 5개의 원소를 가지는 vector v1 생성
vector<int> v2(5, 2); // 2로 초기화된 5개의 원소를 가지는 vector v2 생성
vector<int> v3(v2); // v2를 복사해서 v3을 생성
// 멤버 함수
v1.assign(5, 2); // 2의 값으로 5개 원소 할당
v1.at(2); // 2번째 원소 참조
v1[2]; // 2번째 원소 참조
v1.front(); // 첫번째 원소 참조
v1.back(); // 마지막 원소 참조
v1.clear(); // 모든 원소 제거 => 메모리는 유지 => size 줄어들고 capacity는 그래도
v1.push_back(3); // 맨마지막 원소 뒤에 원소 3을 삽입
v1.pop_back(); // 마지막 원소를 제거
v1.begin(); // 첫번째 원소를 가리킴
v1.end(); // 마지막의 "다음"을 가리킴
v1.rbegin(); // reverse begin을 가리킨다(거꾸로 해서 첫번째 원소를 가리킴)
v1.rend(); // reserve end를 가맄킨다(거꾸로 해서 마지막을 가리킴)
vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
v.push_back(5);
/*
size_type : 벡터의 요소 수를 계산하는 형식
size_type(unsigned int) 은 컴파일러가 vector<T> 클래스 템플릿을 생성할 때 vector<T> 클래스 내부에서 정의된다
vector<T> 객체의 size와 capacity 타입은 vector<T>::size_type
원소의 개수를 셀 때 size_type을 사용하면 될 것 같다.
*/
/* size_type 사용 */
for (vector<int>::size_type i = 0; i < v.size(); i++)
{
cout << v.at(i) << " ";
}
cout << endl << endl;
for (vector<int>::size_type i = 0; i < v.size(); i++)
{
cout << v[i] << " ";
}
cout << endl << endl;
/* int 사용 -> at은 사용 안된다 */
for (int i = 0; i < v.size(); i++)
{
cout << v[i] << endl;
}
}
참고
coding-factory.tistory.com/596
'Language&Framework&Etc > C++' 카테고리의 다른 글
C++에서 문자 형태의 숫자를 입력 받았을 때 숫자 형태로 변경하는 방법 (0) | 2021.04.11 |
---|---|
Malloc 정리 (0) | 2021.04.09 |
템플릿 (0) | 2021.01.13 |
가상함수 (0) | 2021.01.12 |
C++ 상속 예제 (0) | 2021.01.10 |