2024. 12. 31.

 

1. vector?

- dynamic array

- random access iterator (포인터처럼 대부분의 연산 가능)

- 성질은 일반 배열과 유사함.

#include <vector>

시간복잡도

Space
O(n)
Insert
O(n)
Push_back
O(1)
Search
O(n)
Delete
O(n)
Pop_back
O(1)
Migration
O(n)
: 넣거나 지운 위치 앞뒤로
미루고, 당겨야해서 n번이 필요함.
: 얘는 그 과정이 필요하지 않아서 1번

2. 공간할당

+ 공간 크기를 바꾸려면?

v.clear()      //size = 0, capacity는 변화 없음.
v.reserve(x)   //capacity를 x로 변경. 기존 크기보다 클 때만 실행. 기존 크기보다 작으면 무시함. 
v.rexize(x)    //size를 x로 변경. capacity가 x보다 작으면 할당 후 변경
/* size가 x보다 작으면 남는 공간을 0으로 삭제함. 
size가 x보다 크면 x 사이즈까지만 자르고 뒤에 남는 것은 버림. 용량은 그대로. */

3. 원소 삭제

1. erase()
2. 마지막 element로 덮어쓰기
O(n)
element들의 순서가 유지O
O(1)
element들의 순서가 유지X
v.erase(v.begin()+2);
① v[2] = v.back();
② v.pop_back();
 
 

+ 2번방법은 순서가 무관하다면 좋은 방법임. vector의 개수가 많아질수록 더더욱.

4. vector 주요 문법

template<
    class T,
    class Allocator = std :: allocator<T>  // 모든 컨테이너가 allocator포함하므로 별도 설정x
> class vector;

vector <T> v  // size_t : unsigned long long

iterator v.begin(), v.eng()    // iterator 반환 v.begin == v.front
reverse_iterator v.rbegin(), v.rend()
T v[int idx]    // 배열의 인덱스에 접근. T v[0] T v[i]
bool v.empty()   // vector가 비어있는지 확인하기 - iterator 공통
void v.clear()   // 초기화  - iterator 공통
size_t v.size()  // 크기, 개수  - iterator 공통
size_t v.capacity()  // 용량
void v.resize(int n), v.reserve(int n) // 크기 변경, 용량 변경
T v.front(), v.back() // 맨앞, 뒤의 value값을 반환
void v.push_back(T x), v.pop_back()   // 맨 뒤에 원소 넣고 빼기

iterator v.insert(iterator pos, T x) // x를 pos위치에 넣어라(index 아님)
iterator v.insert(iterator pos, int count, T value) // value값을 pos위치에 count개 넣어라
iterator v.insert(iterator pos, iterator first, iterator last) // [first,last)를 pos에 넣어라
// 얘네를 실행하면 처음 입력된 element의 iterator를 반환함. 등록된 위치의 iterator, 구간은 맨 앞
// 구간 입력할 때 v.begin 이게 맨앞 두번째는 v.begin+1 이런 방식으로 입력. index로 쓰는거 아님

iterator v.erase(iterator pos)
iterator v.erase(iterator firest, iterator last)
// 마지막 지워진 element의 다음 iterator 반환
// ex) iterator v.erease(v.begin, v.begin+3)  -> 1,2,3번 element 지우고 4번 반환
 

 

5. vector 예시

vector <T> v
for (int i=1; i<=5; i++)v.pudh_back(i); // 1 2 3 4 5

for (int i=0; i<v.size(); i++) cout << v[i] << ' ';  // 배열처럼 돌기 inedx 이용
for (auto x:v) cout << x << ' '; //range base loof 사용하기

vector<int>::iterator it //(iterator type)
for (auto it = v.begin(); it != v.end; ++it) cout << *it << ' ';  // 일반적인 iterator 순회

vector<int>::reverse iterator it //(iterator type)
for (auto it = v.rbegin(); it != v.rend; ++it) cout << *it << ' '; // 5 4 3 2 1

v.insert(v.begin(),6);  // 6 1 2 3 4 5
v.insert(v.end(), 7);   // 6 1 2 3 4 5 7
v.insert(v.begin() +3, 8);   // 6 1 2 8 3 4 5 7

v.erase(v.begin() +1);   // 6   2 8 3 4 5 7    // erase는 reverse사용 x error남
v.erase(v.end() -1);     // 6 2 8 3 4 5
v.pop_back();             // 6 2 8 3 4

v[2] = 0;    // 6 3 0 3 4
v.empty();   // 0
v.size();    // 5

sort(v.begin(), v.end());   // 0 2 3 4 6
 

 

'C++ > STL' 카테고리의 다른 글

[STL] String  (0) 2025.06.13
[STL] Deque, List  (1) 2025.06.12
[STL] STL Algorithm - sort, nth_element, find, find_if  (0) 2025.06.12
[STL] STL Iterator  (0) 2025.06.12
[STL] Modern C++ (2) - operator overloading, function object  (1) 2025.06.12

+ Recent posts