C ++排序函数中的奇数

时间:2017-07-26 13:49:10

标签: c++ sorting codeblocks

#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

2 个答案:

答案 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];