我正在寻找有关如何组织我的C ++代码的一些建议。
我有一个int数组,我希望它是静态的,因为它的值在调用之间保持不变。这是因为我的函数foo()会递归地修改数组端,因此我不希望副本由副本组成。此外,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;
}
答案 0 :(得分:1)
递归调用可以将指针传递给自己:
class A
{
int *pMemberList;
...
void foo();
}
然后正在处理相同的列表。
话虽如此,因为foo在一个类中,你不需要全局,但是成员变量。
foo
现在foo可以一直看到pMemberList。
但是...传递它可能是一个更好的选择,因为将来你的班级可能会包含你想要yyyy
开的2个列表。