2013-04-11 57 views
-2

我有一個程序,我在python中,我正在轉換它的過程中,以便我可以在C++中使用它,我在python版本中的代碼下面是使用[:]運算符,我想知道C++中的等價物是什麼,或者我可以在C++中做什麼,它會執行與[:]相同的操作,基本上是創建列表的副本,以便原始列表不是編輯。如何將python更改爲與C++中的等效項目

def noTwoNumbersAlike(list): 
    list.sort() 
    for i in range(1, len(list)): 
     if(list[i-1] == list[i]): 
      return False 
    return True 

def checkLines(board): 
    length = len(board) 
    errorFound = False 

    for x in range(length): 
     if(not noTwoNumbersAlike(board[x][:])): 
      return False 
     temporaryList = [] 
     for y in range(length): 
      temporaryList.append(board[x][y]) 
     if(not noTwoNumbersAlike(temporaryList)): 
      return False 
    return True 
+6

我認爲如果您還向我們展示了您的C++代碼,將會更容易提供建議。 – NPE 2013-04-11 14:50:37

+1

注意:據我所知,python中的[[:]'只提供數據的副本,所以...只是複製數據? – 2013-04-11 14:51:56

+0

請注意,'[:]'不會轉換爲所有對象的「複製」。 – mgilson 2013-04-11 14:52:46

回答

1

這完全取決於你用什麼數據結構來存儲列表在C++中。如果您使用的載體(其鎖進你的列表中的單個類型的數據),那麼你可以這樣做:

#include <vector> 
using std::vector; 

int main() { 
    vector<int> first; 
    // populate first 
    vector<int> second(first); 
    // Now second is a copy of first 
} 

同樣,載體鎖定你到一個單一的類型,但是,只要不管你使用如果你使用的是標準數組,那麼在這裏存儲列表可能會是一個拷貝構造函數(如果你使用某種類的話),那麼你將不得不手動拷貝。

+0

我正在使用一個2維數組。 – Thomas 2013-04-11 14:59:30

+0

然後你的代碼會更復雜,但是同樣的概念。同樣,這取決於您選擇在C++中使用的最終決定。我給你一個樣本,而不是你的最終目標。 – 2013-04-11 15:11:08

0

試試這個代碼

#include<iostream> 
#include<vector> 
using namespace std; 
template<class T> 
void sort_vector(vector<T> &v) 
{ 
    if (v.size()!=0) 
    { 
    //this sort is very bad but work 
    //you can wite a sort that work very speedly 
    //so this sort is very slow for large data 
    for (int i=0 ;i<v.size();i++) 
    { 
     for (int j=0;j<v.size()-1;j++) 
     { 
      if (v[j]>v[j+1]) 
       {T temp=v[j]; 
       v[j]=v[j+1]; 
       v[j+1]=temp;} 
     } 
    } 
    } 
} 

template<class T> 
bool noTwoNumberAlike(vector<T> list) 
{ 
    sort_vector(list); 
    for (int i=1;i<list.size();i++) 
    { 
     if(list[i-1]==list[i]) 
      return false; 
    } 
    return true; 
} 

template<class T> 
bool checkLines(vector< vector<T> > board) 
{ 
    int length=board.size(); 
    bool errorFound=false; 

    for (int i=0;i<length;i++) 
    { 
     if(not noTwoNumberAlike(board[i])) 
      return false; 
     vector<T> temporaryVector; 
     for (int j=0;j<length;j++) 
      temporaryVector.push_back(board[i][j]); 
     if (not noTwoNumberAlike(temporaryVector)) 
      return false; 
    } 
    return true; 
} 

在Python我們不需要聲明變量,但在C++中,我們需要
而這種特質不要讓我們在C免費++但模板中,我們解決這個問題
使用上面的代碼:(只是一個例子)

int main() 
{ 
    vector< vector<int> > g(3); 
    for (int i=0;i<3;i++) 
    { 
     g[i].push_back(i); 
     g[i].push_back(j); 
     g[i].push_back(i+j); 
    } 
    cout<<checkLines(g); 
    return 0; 
}