C ++ 14에서 vector.reserve ()의 예기치 않은 동작? [복제]

Nov 13 2020

Integer 벡터를 정렬하는 코드를 작성했는데 한 버전은 제대로 작동하고 다른 버전은 작동하지 않는 것으로 나타났습니다.

버전 1 : vector.reserve 사용

#include <bits/stdc++.h>
using namespace std;
int main(void)
{
      ios_base::sync_with_stdio(false);
      vector<int> a;
      a.reserve(4);
      int i = 0;
      while (i < 4)
      {
            cin >> a[i++];
      }
      sort(a.begin(), a.end());
      for (int i :a)
      {
            cout << i << " ";
      }
}
INPUT: 1 5 3 2
OUTPUT:

버전 2 : 사전에 벡터 크기 정의

#include <bits/stdc++.h>
using namespace std;
int main(void)
{
      ios_base::sync_with_stdio(false);
      vector<int> a(4);
      int i = 0;
      while (i < 4)
      {
            cin >> a[i++];
      }
      sort(a.begin(), a.end());
      for (int i :a)
      {
            cout << i << " ";
      }
}
INPUT: 1 5 3 2
OUTPUT: 1 2 3 5

나는 둘 사이의 차이점이 무엇인지 그리고 어떤 차이가 있다면 언제 사용 해야하는지 잘 모르겠습니다.

답변

1 Anonymous1847 Nov 13 2020 at 01:26

vector reserve메서드는의 크기를 변경하지 않고 vector할당 된 메모리 양을 변경합니다. 의 크기 vector가 여전히 0 이기 때문에 첫 번째 예제에있는 루프의 0에서 3까지의 인덱스에 쓸 수 없습니다 resize. 크기도 변경되는을 원할 것 입니다.