C++ 列表中的最大数

C++ 列表中的最大数,c++,vector,input,output,C++,Vector,Input,Output,第一行有两个值N和K。N是初始行之后的输入数,K是要查找的最大数 输入示例: 5.2 六, 七, 十七, 十一, 六, (5行输入,寻找2个最大值) 示例输出: 十七, 十一, 出于某种原因,我只得到了第一个输出,而没有得到第二个输出 vector<long> vectorAddCheck(vector<long> x, long value){ if(x.empty()){ x.push_back(value); } else {

第一行有两个值N和K。N是初始行之后的输入数,K是要查找的最大数

输入示例:

5.2

六,

七,

十七,

十一,

六,

(5行输入,寻找2个最大值)

示例输出:

十七,

十一,

出于某种原因,我只得到了第一个输出,而没有得到第二个输出

vector<long> vectorAddCheck(vector<long> x, long value){
    if(x.empty()){
        x.push_back(value);
    }
    else {
        for(int i = 0; i < x.size(); i++){
            if(x[i] < value){
                x[i] = value;
            }
        }
    }
    return x;
}


int main() {
    long numLines, numOutputs, temp;
    vector<long> outputList = {};
    cin >> numLines >> numOutputs;

    for(int i = 0; i < numLines; ++i){
        cin >> temp;
        outputList = vectorAddCheck(outputList, temp);
    }

    for(int i = 0; i < outputList.size(); i++){
        cout << outputList[i] << endl;;
    }
    return 0;
}
vector vectorAddCheck(向量x,长值){
if(x.empty()){
x、 推回(值);
}
否则{
对于(int i=0;i>numLines>>numOutputs;
对于(int i=0;i>温度;
outputList=vectorAddCheck(outputList,temp);
}
对于(int i=0;icout由于实现了
vectoradcheck
,您的输出向量只包含一个数字。如果向量为空,则添加一个项目,否则您要么替换它,要么跳过新项目。因此,您的向量将始终包含一个对象

您可以通过将方法更改为以下实现来修复它:

vector<long> vectorAddCheck(vector<long> x, long value){
    if(x.size() < 2){
        x.push_back(value);
    }
    else {
        unsigned min = (x[0] < x[1]) ? 0 : 1;
        if (x[min] < value){
            x[min] = value;
        }
    }
    return x;
}
vector vectorAddCheck(向量x,长值){
如果(x.size()<2){
x、 推回(值);
}
否则{
无符号最小值=(x[0]
不过,更清洁的实施是可能的:

int main() {
    long numLines, numOutputs, temp;
    cin >> numLines >> numOutputs;

    set<long> numbers;
    for(int i = 0; i < numLines; ++i){
        cin >> temp;
        numbers.insert(temp);
    }


    for (set<long>::reverse_iterator it = numbers.rbegin(); it != numbers.rend(); ++it)
    {
        cout << *it << endl;

        --numOutputs;
        if (numOutputs == 0) {
            break;
        }
    }

    return 0;
}
intmain(){
长金属线、金属线、温度;
cin>>numLines>>numOutputs;
设定数字;
对于(int i=0;i>温度;
数字。插入(临时);
}
for(set::reverse_iterator it=numbers.rbegin();it!=numbers.rend();+it)
{

cout由于实现了
vectoradcheck
,您的输出向量只包含一个数字。如果向量为空,则添加一个项目,否则您要么替换它,要么跳过新项目。因此,您的向量将始终包含一个对象

您可以通过将方法更改为以下实现来修复它:

vector<long> vectorAddCheck(vector<long> x, long value){
    if(x.size() < 2){
        x.push_back(value);
    }
    else {
        unsigned min = (x[0] < x[1]) ? 0 : 1;
        if (x[min] < value){
            x[min] = value;
        }
    }
    return x;
}
vector vectorAddCheck(向量x,长值){
如果(x.size()<2){
x、 推回(值);
}
否则{
无符号最小值=(x[0]
不过,更清洁的实施是可能的:

int main() {
    long numLines, numOutputs, temp;
    cin >> numLines >> numOutputs;

    set<long> numbers;
    for(int i = 0; i < numLines; ++i){
        cin >> temp;
        numbers.insert(temp);
    }


    for (set<long>::reverse_iterator it = numbers.rbegin(); it != numbers.rend(); ++it)
    {
        cout << *it << endl;

        --numOutputs;
        if (numOutputs == 0) {
            break;
        }
    }

    return 0;
}
intmain(){
长金属线、金属线、温度;
cin>>numLines>>numOutputs;
设定数字;
对于(int i=0;i>温度;
数字。插入(临时);
}
for(set::reverse_iterator it=numbers.rbegin();it!=numbers.rend();+it)
{

为什么不把它们全部添加到数组中,对它进行排序,然后去掉第一个N?当向量的长度为0时,你将一个值推到向量上,这样你的向量的长度最大为1。必须得到
std::partial_sort
!睡眠剥夺让我思考不清。这让事情变得简单多了。谢谢!@Tadman为什么不把它们全部添加到t上呢他对数组进行排序,然后去掉第一个N?当向量的长度为0时,你将一个值推到向量上,使向量的长度最大为1。必须得到
std::partial_sort
!睡眠剥夺让我无法正确思考。这使这变得简单多了。谢谢!@tadman