vector<int>v(9,0);
vector<int>v(9);
편의상 일반 배열을 배열이라고 부르겠다.
일반적으로 배열을 사용할 때 쓰레기값이 들어가는 걸 방지하기 위해 int arr[10] = { 0 , } 과 같이 초기화하고는 한다.
이게 습관이 되어 벡터를 처음 썼을 땐 나도 모르게 저렇게 초기화해주곤 했다.
배열은 입력값을 넣어주는 함수가 따로 존재하지 않아 arr[i]=input 이런 식으로 값을 할당해주는데, 벡터의 경우 배열처럼 값을 할당하는 방법과 push_back, insert 등 입력값을 삽입해주는 함수를 사용하는 방법이 있다. 함수를 사용하는 경우 발생하는 문제가 인덱스로 접근하여 값을 갱신해주는 방식이 아니라 계속 값이 쌓이는 방식이라 9개의 0은 지워지지 않고 0 0 0 0 0 0 0 0 input input2 input3 이런식으로 쌓인다.
벡터를 사용하는 이유가 뭔가? 입력 받는대로 동적으로 크기를 할당할 수 있다는 가장 큰 장점때문이다.
따라서 굳이 초기화할 필요가 없다. 어떻게 보면 당연한 이야기지만 가끔 실수할 때가 있어 기록을 해둔다.
참고로 이것도 잊어버릴까봐 적어둔다. 배열은 정적배열이고 벡터는 동적배열이다. 정적배열과 다르게 동적배열에 원소를 추가하려면 메모리 할당 작업이 필요하다. 따라서 초기화 속도에 있어서 두 작업을 비교해보면 벡터가 더 느릴 수 밖에 없다. 가끔 벡터를 사용하면 시간 초과가 발생하고 일반 배열을 사용해야 통과가 되는 문제들이 있다. 벡터가 훨씬 편리하게 느껴지지만 erase 등 느린 동작이 많아 곤란할 때가 종종 있다. 적절하게 잘 사용해야지...
'나도 공부한다 > 알고리즘' 카테고리의 다른 글
[백준] 1259. 팰린드롬수 (C++) (0) | 2023.02.26 |
---|---|
[백준] 7568. 덩치 (C++) (0) | 2023.02.07 |
[백준] 13701. 중복제거 (C++) (0) | 2023.02.06 |
[백준] 1654. 랜선 자르기 (C++) (0) | 2023.01.31 |
[백준] 2805. 나무자르기 (C++) (0) | 2023.01.26 |