我写了一个代码,它将通过矢量在一个arr中找到最大值1和最小值1 但我根本不知道自己犯了什么错误。
每次我尝试为我返回零时,大声笑
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{
int a[999];
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
vector<int> arr(a[1], a[n]);
int max = *max_element(arr.begin(), arr.end());
int min = *min_element(arr.begin(), arr.end());
int dis = max - min; cout << dis << endl;
return 0;
}
答案 0 :(得分:2)
我的代码[?]怎么了
老实说,几乎所有东西。
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
using namespace std;
can cause harm,而不是像这样的小例子,但最好不要习惯坏习惯。
int main()
{
int a[999];
您为999个元素分配空间。如果用户输入1000
的{{1}}怎么办?
n
数组索引从 int n;
cin >> n;
开始,而不是0
。假设用户输入了1
,那么您仍然超出了调用undefined behaviour的范围,因为999
不是数组的元素。
a[999]
您正在调用std::vector
constructor,该向量的大小可以容纳值 for (int i = 1; i <= n; i++) {
cin >> a[i];
}
的{{1}}个元素。这不是将元素从数组复制到向量!所有元素将具有相同的值,因此您总是得到a[1]
作为结果。
a[n]
这并不是真正的错误,但是写起来不必要地复杂。 max_element
返回一个迭代器,您可以使用例如。 std::distance
获取两个迭代器之间的距离。
0
您可以这样写
vector<int> arr(a[1], a[n]);
int max = *max_element(arr.begin(), arr.end());
int min = *min_element(arr.begin(), arr.end());
PS:请小心 int dis = max - min; cout << dis << endl;
return 0;
}
。在C ++ 11之前,使用第二个参数调用它是未定义的行为,而第二个参数无法通过向前传递的第一个迭代器来访问。另外请注意,有std::minmax_element
可以让您两个迭代器都不必遍历向量一次。