Vector
동적으로 원소를 추가하고 크기를 자동으로 늘려준다.
C++ 표준 라이브러리(STL) → #include <vector>
- front() : 첫 번째 원소
- back() : 마지막 원소
- begin() : 첫번째 위치
- end() : 마지막의 다음 위치
- size() : 원소 개수
- capacity() : 할당된 공간 크기
- push_back(value) : vector 끝에 원소 삽입
- pop_back() : 끝에 있는 원소 삭제
- insert(index, value) : index 위치에 원소 삽입
- erase(iter) : vector의 iter 위치의 원소 삭제
- erase(iter1, iter 2) : [iter 1, iter 2) 앞 까지 원소 삭제
- resize(size), resize(size, value) : size 만큼 크기 변경하거나 동시에 초기화
- clear() : 모든 원소 삭제
- empty(): 비어있는지 확인합니다. (true / false)
#include <iostream>
#include <vector>
using namespace std;
int main(void)
{
vector<int> v;
v.push_back(3); v.push_back(4);
v.push_back(5); v.push_back(6);
v.push_back(7);
cout << v[0] << endl; // 3
cout << v.size() << endl; // 5
cout << v.capacity() << endl; // 6
v.erase(v.begin()); // [0]번째 원소 3 제거
v.erase(v.begin() + 1, v.begin() + 2); // [1]번째 원소 5 제거
for (int i = 0; i < v.size(); i++) {
cout << v.at(i) << " ";
}
cout << endl;
}
특징
• 가변적으로 크기가 변하는 배열이라고 볼 수 있다.
• 속도적인 측면에서는 배열에 비해 떨어지더라도
메모리 측면에서는 효율적인 관리 가능
• 한 메모리 블록에 연속하게 저장
→ 메모리 재할당에 따른 부하 발생 有
• 중간 삽입/삭제가 빈번한 경우에는 vector 구조다 링크드리스트 구조를 사용하느 것이 효율적.
• 반복자 iterator도 사용 가능
• vector에는 .at(index)처럼 [index] 처럼
index번째 원소에 접근하는 것은 동일하다.
다만 at(index)은 범위를 검사하여 범위 밖 원소 접근시 예외처리 (std::out_of_range)
[](operator [])는 범위검사가 없기에 예외처리 발생 X
이처럼 vector는 다양한 선언방법과 메소드 용도가 존재한다.
• C++17 부터는 초기값이 있는 경우 타입 인자 생략 가능
• 초기값이 없는 경우 반드시 타입인자 전달 필요
std::vector<int> v1 = { 1, 2 }; // ok
std::vector v2 = { 1, 2 }; // ok (C++17 부터)
std::vector<int> v3; // ok
std::vector v4; // error
Q) size와 capacity 차이와 용도가 무엇인가요?
ex) 10개(=capacity) 중에 3개(=size)
→ vector는 일정 capacity 만큼의 메모리가 할당되는데 원소가 새롭게 삽입될 때마다
추가적인 메모리 할당이 필요하다.
이때, capacity (= 용량)가 부족한 경우 {capacity/2} 만큼 capacity를 늘린다.
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C/C++] 함수 template (0) | 2025.01.11 |
---|---|
[C/C++] 문자열 String (0) | 2025.01.10 |
[C++] decltype 키워드 (1) | 2025.01.02 |
[C++] 일관된 초기화 (uniform initialization) (2) | 2025.01.01 |
[C++] structure binding (3) | 2024.12.31 |
댓글