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
. 크기도 변경되는을 원할 것 입니다.