我正在寻找有关如何组织C ++代码的建议。

另外,我有一个int数组,我希望它是静态的,因为它的值在两次调用之间保持不变。这是因为我的函数foo()会递归地修改数组side,所以我不希望副本由side组成。此外,side的大小只能在编译时根据传递到函数bar()中的向量的大小来确定。

我考虑过以下结构来布局这样的问题。

我保留了一个全局int指针side,然后可以使用它指向我的int数组的地址,然后在foo中使用指针* side进行修改。

请您给我有关此代码的布局和组织的建议吗?我对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;
}

最佳答案

递归调用可以将指针传递给自身:

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


然后将处理相同的列表。

话虽这么说,因为foo在类内部,所以您也不需要全局变量,而只需一个成员变量。

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


现在foo可以一直看到pMemberList。

但是...传递它可能是一个更好的选择,因为将来您的班级可能会容纳2个您要在其上执行foo的列表。

关于c++ - 组织C++代码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39021904/

10-11 18:02