2016-08-18 10 views
0

私はC++コードを整理する方法についていくつかのアドバイスを探しています。C++コードの整理

は、私は、その値が呼び出しの間で一定に保たれているという意味で静的になりたいという、int配列、側面を持っています。これは、私の関数foo()が配列側を再帰的に変更するため、コピーを横向きにしたくないからです。さらに、サイドのサイズは、コンパイル時にファンクションバー()に渡されるベクトルのサイズからのみ決定できます。

私はこのような問題をレイアウトするために以下の構造を考えました。

私はその後、私のint配列のアドレスを指し、その後、私の変更を行うには、FOO内ポインタ*側を使用するために使用できるグローバルなint型のポインタ、側面を、保ちます。

あなたは私にこのコードのレイアウトと組織について助言を与えることができますしてください?私は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 =新しいint型[サイズ]; '?単純に '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つのリストを収容する可能性がある将来のように、それはおそらくより良いオプションで渡します。

関連する問題