배열의 성질
- 임의의 위치에 원소를 추가: O(N)
-> 그 뒤의 원소들을 전부 한 칸씩 밀어야 함
- 임의의 위치에 있는 원소를 제거: O(N)
Vector
- 배열과 마찬가지로 원소가 메모리에 연속하게 저장
- 배열과 달리 크기를 자유자재로 변경 가능(인접 리스트에 활용)
- insert, erase: O(N)
- push_back, pop_back: O(1)
- push_front, pop_front: O(N)
- '='을 사용하면 deep copy 발생 -> 원본에 영향 X
모든 원소 순회 방법
1. range-based for loop
for(int e : v1)
cout << e << ' ';
- C++11 이상(삼성전자는 지원 X)
- e를 바꿔도 원본에 영향 X
- int&을 쓰면 e를 바꿨을 때 원본에 영향 O
2. index-based for loop
for(int i = 0; i < v1.size(); i++)
cout << v1[i] << ' ';
📍주의
for(int i = 0; i <= v1.size() - 1; i++)
cout << v1[i] << ' ';
이렇게 쓰면 (unsigned int)0 - (int)1 = 4294967295가 되어 버림!
∵ unsigned int로 자동 형변환
선언 시 주의 사항
vector<int> v(5);
for (int i = 0; i < 5; i++)
{
v.push_back(i);
}
- 이렇게 크기를 지정해두면서 선언을 할 경우, 5개의 원소가 0으로 초기화됨
- 그 다음에 push_back 함수를 실행하면 5개의 0 뒤로 새로운 원소가 들어가게 됨
vector<int> v;
for (int i = 0; i < 5; i++)
{
v.push_back(i);
}
- 차라리 그냥 이렇게 크기는 지정하지 말고 선언하자