【发布时间】:2019-12-16 13:35:17
【问题描述】:
我只是想学习 STL 以进行竞争性编程,但我一直在怀疑这个问题! 1. 当我使用 vector::reserve(n) 时,标记为 loop1 和 loop2 的循环不打印任何内容。 2. 但是当我使用 vector::assign(n,0) 我的循环标记为循环 1 和循环 2 工作正常。 为什么会这样?
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
int main()
{
int test;
scanf("%d", &test);
while (test > 0) {
int n;
scanf("%d", &n);
vector<int> arr;
arr.reserve(n);
//arr.assign(n,0);
for (int i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
sort(arr.begin(), arr.end());
vector<int>::iterator itr;
// loop1
for (int x : arr) {
printf("%d ", x);
}
//loop2
for (itr = arr.begin(); itr != arr.end(); itr++) {
printf("%d ", *itr);
}
test--;
}
return 0;
}
【问题讨论】:
-
reserve不会创建任何元素。它的大小仍然是 0。 -
你能解释一下吗!而不是投票!我是新手!
-
嗯,你可以做的第一件事是写一个 3 行的
main程序,简单地调用(错误地)reserve,看看问题出在哪里。你不需要一个成熟的程序来做这个简单的测试。 -
请阅读documentation。
-
@ShivamKasat 当您遇到问题并正在寻找解决方案时,请将程序减少到重现问题所需的最低限度。通常这会使前进的道路变得清晰,您不必问问题。如果没有好的解决方案出现,那么您可以很好地提出这个问题,因为代码示例中没有噪音。使用minimal reproducible example 作为灵感。