2016-08-18 145 views
0

我正在尋找一些關於如何組織我的C++代碼的建議。組織C++代碼

我有一個int數組,側,我想是靜態的,因爲它的值在調用之間保持不變。這是因爲我的函數foo()會遞歸地修改數組,所以我不希望副本被放在一邊。此外,邊的大小隻能在編譯時根據傳入函數欄()的向量的大小來確定。

我想到了以下結構來佈置這樣的問題。

我保留一個全局的int指針,我可以用它指向我的int數組的地址,然後在foo中使用指針*一邊來做我的修改。

請你給我建議這個代碼的佈局和組織?我對C++相當陌生,因此會對以下結構提出任何建議。

#include <iostream> 
#include <vector> 

using namespace std; 

int *side; 

class A { 
    public: 
     int foo(bool); 
     int bar(vector<int>); 
     void set_n(int n){ class_n = n;}; 
    private: 
     int class_n; 
}; 

int A::foo(bool fl) 
{ 
    int n = class_n; 
    for(int i = 0; i < n; i++) { 
     // modify side[] and then recursively call foo 
    } 

    return 0; 
} 

int A::bar(vector<int> t) 
{ 
    int size = t.size(); 
    set_n(size); 
    int a = foo(true); 

    int *side_local = new int[size]; 
    for(int i = 0; i < size; i++) { 
     side_local[i] = 0; 
    } 
    side = side_local; 
    return 0; 
} 

int main() 
{ 
    A a; 
    vector<int> t = {1, 2, 3}; 
    a.bar(t); 
    return 0; 
} 
+1

你爲什麼包含'',但是在這裏沒有使用它:'int * side_local = new int [size]; '?爲什麼不簡單地'std :: vector side_local(size);'?或者只是'side.resize(size);'而不是做任何代碼? – PaulMcKenzie

+1

它取決於上下文,而你沒有提供。陣列應該代表什麼?它以某種方式與A鏈接?它應該歸A所有?爲什麼不使用矢量?你不會通過傳遞參考或指針來複制... – Nelfeal

回答

1

遞歸調用可以傳遞一個指針本身:

void foo(int *pList) 
{ 
    foo(pList); // recursive 
} 

相同的列表,然後正在處理。

這就是說,因爲foo是在一個類中,所以你不需要全局變量,而是一個成員變量。

class A 
{ 
    int *pMemberList; 
    ... 
    void foo(); 
} 

現在foo可以一直看到pMemberList。

但是...通過它可能是一個更好的選擇,因爲在將來你的班級可能會安排你想做foo的2個列表。