2016-08-18 96 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个列表。