C ++函数返回一个值并从数组

时间:2017-02-25 17:04:57

标签: c++

我有这个功能:

int findnext(int nr,int counter,int v[]){
    int i,newnr=-1;
    for(i = counter-1; i >= 0; i--){
        if(v[i] > nr){
            newnr = v[i];
        }
    }
    if(newnr == -1) return -1;
    else return newnr;
}

这个函数的作用是,它在数组中找到下一个更大的数字,如果它找不到一个,则返回-1;我想要做的是,在我的主要课程中使用这个之后......

int main(){
  int a=1;counter=3;
  int v[3]={-1,2,3}; //v[0] is -1 because a=1
  a = findnext(a,counter,v);
}

...用-1替换主类中的v [1](因为它发现下一个大数字为2)并将v [0]上的-1替换为1(变量a之前是什么) )。这可能吗?

提前谢谢!

额外信息:

  1. int v [5]可以是{1,1,3,3,4}开头(它可以有多个相同的元素)

  2. int v [5]可以{1,4,6,7,9}开头(不是{1,2,3,4,5 ...})

  3. 数组已排序。

  4. 如果函数的结果是-1,那么它会使数组进入原始状态

  5. 数组永远不会有一个小于0的数字。

  6. 示例:

    该计划以: v [5] = {1,6,7,9,9};和a = -1;

    我执行函数:a = 1; v [5] = { - 1,6,7,9,9};

    我再次执行它:a = 6; v [5] = {1,-1,7,9,9};

    我再次执行它:a = 7; v [5] = {1,6,-1,9,9};

    我再次执行它:a = 9; v [5] = {1,6,7,-1,9-};

    我再次执行它:a = 9; v [5] = {1,6,7,9,-1};

    我再次执行它:a = -1; v [5] = {1,6,7,9,9);

1 个答案:

答案 0 :(得分:0)

试试这段代码。解决此问题的最佳方法是记住旧的替换值和索引,并在进行新更改时将其替换回来。

这里我使用了c ++ 11 initializer_list来简化初始化。

#include<iostream>
#include<string>
#include<vector>
#include<sstream>
#include<iterator>
#include<initializer_list>

using namespace std;

template <int t> class Selectable
{

    int index;
    int value;
    int v[t];

public:
    Selectable() : index(-1), value(-1)
    {

    }

    Selectable(initializer_list<int> x) : index(-1), value(-1)
    {
        copy(x.begin(), x.begin() + t, v);
    }

    int selectNext(int n)
    {
        if (index + 1 == t)
        {
            v[index] = value;
            index++;
        }

        cout << endl << index;

        for (int i = index + 1; i < t; i++)
        {
            // cout<<v[i];
            if (v[i] > n)
            {
                if (index >= 0)
                {
                    v[index] = value;
                }

                index = i;
                value = v[i];
                v[i] = -1;

                show();
                return 1;
            }
        }

        show();
        return -1;

    }

    void show()
    {
        copy(v, v + t, ostream_iterator<int>(cout, "\t"));
    }

};

int main()
{
    Selectable<5> s;
    s = {2, 3, 2, 3, 2};

    cout<<s.selectNext(-1)<<endl;
    cout<<s.selectNext(-1)<<endl;
    cout<<s.selectNext(-1)<<endl;
    cout<<s.selectNext(-1)<<endl;
    cout<<s.selectNext(-1)<<endl;
    cout<<s.selectNext(-1)<<endl;
    cout<<s.selectNext(-1)<<endl;
    cout<<s.selectNext(-1)<<endl;

    return 0;
}