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++] STL capacity와 size 함수 차이
[C++] STL capacity와 size 함수 차이
capacity > size 메모리 추가 작업이 빠르게 원소를 할당할 수 있다.capacity 개념이 왜 있는 것일까? clear()는 메모리 공간을 제거하지 않고 size 값만 0으로 만든다resize(0)과 동일하다. Q) v1, v2 중에
zoosso.tistory.com
'프로그래밍 언어 > C++' 카테고리의 다른 글
[C++] const_cast 필요성 및 활용 (4) | 2025.01.22 |
---|---|
[C++] reinterpret_cast 필요성 및 사용 방법 (2) | 2025.01.21 |
[C++] 레퍼런스 Reference (2) | 2025.01.19 |
[C++] Lambda expression 지역 변수 캡처 (2) | 2025.01.18 |
[C++] 후위 반환 타입 (suffix return type) (1) | 2025.01.15 |
댓글