vector, list, map) push_back()을 통해 요소를 추가 가능 배열처럼 동작 #include <vector> // STL 벡터 사용을 위한 헤더 파일 포함
#include <iostream>
using namespace std;
int main()
{
vector<int> v; // 정수형 벡터 선언
v.push_back(1); // 요소 추가
v.push_back(2);
v.push_back(3);
cout << "Vector size: " << v.size() << endl; // 현재 요소 개수 출력
return 0;
}
✅ push_back(value): 벡터의 끝에 value 추가
✅ size(): 현재 저장된 요소 개수 반환
size())와 용량 (capacity())vector<int> v;
for (int i = 0; i < 10; i++) {
v.push_back(i);
cout << "Size: " << v.size() << ", Capacity: " << v.capacity() << endl;
}
✅ size() → 실제 저장된 요소 개수
✅ capacity() → 내부적으로 할당된 메모리 크기
✔ capacity()는 1.5배~2배씩 증가하면서 재할당됨.
vector<int> v;
v.push_back(10); // 끝에 삽입
v.pop_back(); // 끝에서 삭제
✅ push_back(value): 벡터 뒤에 요소 추가
✅ pop_back(): 벡터 마지막 요소 제거
vector<int> v = {1, 2, 3, 4, 5};
// 중간에 100 삽입
vector<int>::iterator it = v.begin() + 2;
v.insert(it, 100);
// 중간 요소 삭제
v.erase(v.begin() + 2);
✅ insert(position, value): 특정 위치에 요소 추가
✅ erase(position): 특정 위치의 요소 삭제
reserve()로 용량 미리 설정vector<int> v;
v.reserve(1000); // 미리 1000개의 공간 할당 (성능 향상)
✅ reserve(n): 용량을 미리 할당하여 메모리 재할당을 방지
clear()와 swap()으로 메모리 해제vector<int> v = {1, 2, 3, 4, 5};
v.clear(); // 모든 요소 제거 (size = 0, capacity 유지)
// 메모리까지 초기화
vector<int>().swap(v); // 빈 벡터와 swap하여 capacity도 0으로 설정
✅ clear(): 요소만 삭제 (capacity는 유지)
✅ swap(): 빈 벡터와 교체하여 메모리까지 해제
vector<int> v = {10, 20, 30, 40, 50};
// 일반 반복자
vector<int>::iterator it;
for (it = v.begin(); it != v.end(); ++it) {
cout << *it << " "; // 10 20 30 40 50
}
✅ begin() → 첫 번째 요소 가리킴
✅ end() → 마지막 요소 다음 위치 가리킴
✅ *it → 반복자가 가리키는 요소 값 접근
vector<int>::reverse_iterator rit;
for (rit = v.rbegin(); rit != v.rend(); ++rit) {
cout << *rit << " "; // 50 40 30 20 10
}
✅ rbegin() → 마지막 요소부터 시작
✅ rend() → 첫 번째 요소 이전까지
vector<int> v = {10, 20, 30, 40, 50};
cout << v[2] << endl; // 30
cout << v.at(2) << endl; // 30 (예외 처리 O)
✅ v[i] → 빠르지만 예외 처리를 하지 않음
✅ v.at(i) → 안전하지만 예외 처리를 포함
Vector 클래스 구현template<typename T>
class MyVector {
private:
T* data;
int size;
int capacity;
public:
MyVector() : size(0), capacity(1) {
data = new T[capacity];
}
~MyVector() {
delete[] data;
}
void push_back(const T& val) {
if (size == capacity) {
reserve(capacity * 2);
}
data[size++] = val;
}
void reserve(int newCapacity) {
if (newCapacity <= capacity) return;
T* newData = new T[newCapacity];
for (int i = 0; i < size; i++) {
newData[i] = data[i];
}
delete[] data;
data = newData;
capacity = newCapacity;
}
T& operator[](int index) {
return data[index];
}
int getSize() const { return size; }
int getCapacity() const { return capacity; }
};
✅ 사용자 정의 벡터를 통해 STL vector와 유사한 동작 구현