Vector
- 동적 배열 구조
- 자동으로 배열의 크기 조절과 객체의 추가와 삭제가 가능
1. 생성 및 초기화
종류 | 상세 설명 |
---|
vector<자료형> 변수명 | 백터 생성 |
vector<자료형> 변수명(숫자) | 숫자만큼 백터 생성 후 0으로 초기화 |
vector<자료형> 변수명 = { 변수1, 변수2, 변수3... } | 백터 생성 후 오른쪽 변수 값으로 초기화 |
vector<vector<자료형> 변수명 | 2차원 백터 생성(열과 행 모두 가변) |
vector<자료형>변수명.assign(범위, 초기화할 값) | 백터의 범위 내에서 해당 값으로 초기화 |
2. Iterators
종류 | 상세 설명 |
---|
begin() | 시작 지점의 주소값 반환 |
end() | 끝 지점 주소값 반환 |
rbegin() | 끝 지점을 시작 지점으로 반환 |
rend() | 시작 지점을 끝 지점으로 반환 |
rbegin(), rend()를 이용한 역순 출력 예시
#include <iostream>
#include <vector>
using namespace std;
void main()
{
vector<int> v = {1,2,3,4,5};
vector<int>::reverse_iterator itr;
for (itr=v.rbegin(); itr!=v.rend(); itr++)
{
printf("%d\n", *itr); // 5, 4, 3, 2, 1
}
}
3. 요소 접근
종류 | 상세 설명 |
---|
at(i) | 백터의 i번째 요소 접근 (범위 검사함) |
v[i] | 백터의 i번째 요소 접근 (범위 검사 안함) |
front() | 백터의 첫번째 요소 접근 |
back() | 백터의 마지막 요소 접근 |
※ at과 []의 차이점
- at은 범위를 검사하여 범위 밖의 요소에 접근 시 예외처리를 발생시킴(std::out_of_range)
- []는 범위검사를 하지 않으며 예외처리 발생시키지 않음
4. 요소 삽입, 삭제
종류 | 상세 설명 |
---|
push_back() | 백터의 마지막 부분에 새로운 요소 추가 |
pop_back() | 백터의 마지막 부분 제거 |
insert(삽입할 위치의 주소 값, 변수 값) | 사용자가 원하는 위치에 요소 삽입 |
emplace(삽입할 위치의 주소 값, 변수 값) | 사용자가 원하는 위치에 요소 삽입(복사생성자 X) |
emplace_back() | 백터의 마지막 부분에 새로운 요소 추가(복사생성자 X) |
erase(삭제할 위치) / erase(시작위치, 끝위치) | 사용자가 원하는 index값 위치의 요소를 삭제 |
clear() | 백터의 모든 요소를 지움(return size = 0) |
resize(수정 값) | 백터의 사이즈를 조정(범위 초과시 0으로 초기화) |
swap(백터 변수) | 백터와 백터를 스왑 |
5. 크기(용량) 관리
종류 | 상세 설명 |
---|
empty() | 백터가 빈공간이면 true, 값이 있다면 false |
size() | 백터의 크기 반환 |
capacity() | heap에 할당된 백터의 실제크기(최대크기) 반환 |
max_size() | 백터가 system에서 만들어 질 수 있는 최대 크기 반환 |
reserve(숫자) | 백터의 크기 설정 |
shrink_to_fit() | capacity의 크기를 백터의 실제 크기에 맞춤 |
size()와 capacity()의 차이점 예시
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> v = { 1, 2, 3, 4, 5};
v.reserve(10);
cout << v.size() << endl; // 5
cout << v.capacity() << endl; // 10
}
참고