c++14中vector.reserve()的意外行为?
我写了一段代码对整数向量进行排序,注意到一个版本工作正常,另一个版本工作不正常 版本1:使用vector.reserve 包括 使用名称空间std; int mainvoid { ios_base::将_与_stdiofalse同步; 载体a; a、 储备4; int i=0; 当我<4 { cin>>a[i++]; } 开始,结束; 对于int i:a { couta[i++]; } 开始,结束; 对于int i:a {c++14中vector.reserve()的意外行为?,c++,sorting,stl,c++14,C++,Sorting,Stl,C++14,我写了一段代码对整数向量进行排序,注意到一个版本工作正常,另一个版本工作不正常 版本1:使用vector.reserve 包括 使用名称空间std; int mainvoid { ios_base::将_与_stdiofalse同步; 载体a; a、 储备4; int i=0; 当我>a[i++]; } 开始,结束; 对于int i:a { couta[i++]; } 开始,结束; 对于int i:a { coutvector reserve方法不会更改向量的大小,它可能会更改分配的内存量。在第
coutvector reserve方法不会更改向量的大小,它可能会更改分配的内存量。在第一个示例中,您仍然无法写入循环中的索引0到3,因为向量的大小仍然为0。您需要调整大小,这也会更改大小。请检查以查看它真正的作用s、 看起来第1个版本调用了未定义的行为。实际上,分配内存并不需要reserve,因此您的循环访问std::vector之外的元素。旁注:注意include和namespace std;。将它们放在一起,您可以非常轻松地以非常疯狂的方式编写程序。自bolov foun以来,更方便的阅读方式d一个更好的副本:节省的时间是一个愚蠢的赌注。include包括整个标准库,并将构建时间降低近一个数量级。如果每次重建程序时都损失5-10秒,那么节省的键入时间将非常、非常快地被消耗掉。
INPUT: 1 5 3 2
OUTPUT:
INPUT: 1 5 3 2
OUTPUT: 1 2 3 5