[바킹독의 실전 알고리즘] 배열, Vector

Jeanine·2022년 3월 3일
0

algorithm

목록 보기
3/17
post-thumbnail

배열의 성질

  • 임의의 위치에 원소를 추가: 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);
}
  • 차라리 그냥 이렇게 크기는 지정하지 말고 선언하자
profile
Grow up everyday

0개의 댓글