2017-02-25 105 views
-1

刪除它,我有這樣的功能: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); 
} 

...更換V [1]與-1(因爲它找到了一個大我的主類編號爲2)並將v [0]上的-1替換爲1(之前的變量a)。這可能嗎?

預先感謝您!

額外的信息:[5]

  1. INT v可以是{1,1,3,3,4},開始與(它可以具有多於一個的相同元素)

  2. INT v [5]可以是{1,4,6,7,9},開始與(未{1,2,3,4,5 ...})

  3. 對數組進行排序。

  4. 如果函數的結果是-1,那麼它使陣列到它的原始狀態

  5. 數組是永遠不會有一個數字,它是小於0。

實施例:

該程序的開頭是: 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};

我再次執行它和:一個= 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);

+0

你的例子似乎不符合你所要求的,或你的功能。看來你的函數返回的數組中的第一個值比傳入的值高(另外,注意,函數末尾的'if'條件是不必要的。) – gmiley

+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; 
} 
+0

非常感謝您對此作出迴應,我認爲沒有人願意!我很感激 –