#include <iostream>
#include <stdlib.h>
#include <algorithm>
#include <vector>
using namespace std;
// To Do: Finish this function
void yourFunction(int N, vector<float>&vec, float &m, float &n){
sort(vec.begin(), vec.end());
n=vec[0];
m=vec[N];
}
int main()
{
int N;
float m,n;
cout << "Please enter the length of array." << endl;
cin >> N;
float *p = (float*) malloc(sizeof(float)*N);
cout << "Please enter the numbers in your array.";
for(int i=0;i<N;i++)
cin >> *(p+i);
vector<float>vec(p[0],p[N-1]);
yourFunction(N,vec,m,n);
cout << "The largest number in your array is " << m << endl;
cout << "The smallest number in your array is " << n << endl;
return 0;
}
所以这是一个C ++程序,用于识别用户输入数组中最大和最小的数字。 Code :: Blocks 16,C ++ 0X标准。
但是,在当前状态下,当我为数组输入1 2 3 4 5
时,程序的输出如下:
https://i.stack.imgur.com/phktl.png
这是什么问题?我是一名业余编码员,我可能会犯一些我没注意到的愚蠢错误。 :P
答案 0 :(得分:2)
你最大的问题是
vector<float>vec(p[0],p[N-1]);
没有构建你认为它的矢量。 p[0]
和p[N-1]
是floats
,而不是指针。所以你要做的是构造一个p[0]
个元素的向量,所有元素的值都为p[N-1]
。如果要为数组构造vector
,则需要的是
vector<float>vec(p,p + N);
您也遇到了
的问题m=vec[N];
由于N
是向量vec[N]
的大小,因此不是有效元素。这是一个结束。你需要的是
m=vec[N - 1];
请注意,此处根本不需要矢量。您可以在float*
中取yourFunction
并直接对其进行排序。看起来很喜欢
void yourFunction(int N, float* data, float &m, float &n){
std::sort(data, data + N);
n = data[0];
m = data[N - 1];
}
int main()
{
int N;
float m,n;
cout << "Please enter the length of array." << endl;
cin >> N;
float *p = (float*) malloc(sizeof(float)*N);
cout << "Please enter the numbers in your array.";
for(int i=0;i<N;i++)
cin >> *(p+i);
yourFunction(N,p,m,n);
cout << "The largest number in your array is " << m << endl;
cout << "The smallest number in your array is " << n << endl;
return 0;
}
即使你说你无法更改main
中的代码,我也想告诉你new
应优先于malloc
答案 1 :(得分:0)
首先你的矢量创建是错误的。
vector<float>vec(p[0],p[N-1]);//p[0] and p[N-1] are values.You need address range
vector<float>vec(p,p+N); //begin with P(including) and end with p+N(excluding)
然后,
n=vec[0];
m=vec[N]; //Last element at N-1
}
应该是
m = vec[N-1];
为什么你同时拥有数组和向量。
使用
std::sort(p,p+N); //and get rid of the vector
或直接将值放入矢量。
vector<float> vec(N);
for(int i=0;i<N;i++)
cin>>vec[i];