2012-10-24 33 views
0

我有Python中的遞歸函數像這樣有沒有辦法在C++中連接兩個數組並返回它們?

def recon(i,j): 
    if i == 0 or j == 0: 
     return [] 
    elif x[i-1] == y[j-1]: 
     return recon(i-1,j-1) + [x[i-1]] 
    elif table[i-1,j] > table[i,j-1]: 
     return recon(i-1,j) 
    else: 
     return recon(i,j-1) 

我想用C++重寫這一點,但問題是我TRID要做到這一點是C++行

  return recon(i-1,j-1) + [x[i-1]] 

,但它劑量編譯,有沒有什麼辦法像python連接數組並返回它們。

+3

請在C++中顯示你到目前爲止的內容。對於你想要達到的目標,最好使用'std :: vector'而不是數組;到一個向量,你可以添加元素,到一個數組,你不能(它們被固定爲它們被創建的大小) – codeling

+0

這也是一個無效的語法@'[x [i-1]]' –

+0

C++中的數組不像Python中的列表。你將需要使用'std :: vector'或'std :: list'。 –

回答

3

不適用於數組。但你可以用矢量做到這一點。

vector<int> x = ...; 
vector<int> y = ...; 
x.insert(x.end(), y.begin(), y.end()); // append y to x 

你可以對動態分配的內存進行類似的處理,但使用向量更容易。

+0

謝謝你的回答 – 2147483647

0

你需要創建一個新的數組,它是包含兩個現有數組的正確大小,然後通過兩個循環來複制它們(在第二個複製時不要忘記保留目標數組上的偏移量)

0

好像遞歸是不必要在這裏:

vector<int> recon(int i, int j) { 
    vector<int> ret; 
    while(i > 0 && j > 0) 
     if(x[i-1] == y[j-1]) 
      ret.push_back(x[--i]), --j; 
     else if(table[i-1][j] > table[i][j-1]) 
      --i; 
     else 
      --j; 
    std::reverse(ret.begin(), ret.end()); 
    return ret; 
} 

(免責聲明:未測試)

1

可能是你可以試試這個

for(int j=0;j<10; j++) 
    mer[j]=a[j]; 
for(int i=0; i<10; i++, j++) 
    mer[j]=b[i]; 

其中mer,a和b已經初始化了數組變量。

相關問題