c++14中vector.rerve()的意外行为
Unexpected behaviour of vector.reserve() in c++14?
我写了一段代码来对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
我不太确定两者之间有什么区别,如果有区别,什么时候使用。
vector
reserve
方法不会更改vector
的大小,它可能会更改分配的内存量。由于vector
的大小仍然为0,因此您仍然无法在第一个示例中的循环中写入索引0到3。您需要resize
,它也会更改大小。
相关文章:
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中用vector填充一个简单的动态数组
- vector.resize()中的分配错误
- 使用std::vector的OpenCL矩阵乘法
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 在某些循环内使用vector.push_back时出现分段错误
- 当vector是tje全局变量时,c++中vector的内存管理
- std::vector的包装器,使数组的结构看起来像结构的数组
- 在C++中对T*类型执行std::move的意外行为
- 为什么(-1)%vector::size()总是返回0
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 在C++中将类(带有Vector成员)保存为二进制文件
- 处理除以零会导致<csignal>意外行为
- 编译器如何区分std::vector的构造函数
- 将 int 数组转换为 std::vector<int*>
- vector.size() 在比较中意外工作
- 从函数的返回值将元素C++存储到 std::vector 中时出现意外结果
- EXC_BAD_ACCESS 在 std::vector <double>的静态声明意外破坏时
- std::vector中的意外更改
- Std::vector::insert给出意外的结果