c++14中vector.rerve()的意外行为

Unexpected behaviour of vector.reserve() in c++14?

本文关键字:意外 vector rerve c++14      更新时间:2024-09-29

我写了一段代码来对Integer的向量进行排序,并注意到一个版本运行良好,而另一个版本则不然

版本1:使用vector.rerve

#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

我不太确定两者之间有什么区别,如果有区别,什么时候使用。

vectorreserve方法不会更改vector的大小,它可能会更改分配的内存量。由于vector的大小仍然为0,因此您仍然无法在第一个示例中的循环中写入索引0到3。您需要resize,它也会更改大小。