2016-05-21 15 views
0

C++で構造体からなる他の配列(可変サイズ)を配列として宣言することはできますか?配列の要素の中にあるすべての構造体に対して、簡単で効率的な方法(forを使って)を反復するのが本当にうれしいでしょう。構造体の配列の配列

構造体は次のように定義されています。私はArduinoの宇野からなる自己製の時計のためにこれを使用したい

{ 
    { {0,0}, {0,1} }, 
    { {0,0}, {0,1}, {1,0}, {0,0} }, 
    { {0,0}, }, 
    { {0,0}, {4,0} } 
} 

:たとえば

struct Number 
{ 
    int x; 
    int y; 
}; 

、データは何かのようなものです、イーサネット(登録商標)シールド、RTCおよびLEDアレイを含む。ソリューションは、必要以上のメモリを使用すべきではありません。だから私は2次元配列を使わない。

+1

'std :: vector >'を使用できない場合は、おそらく独自の実装を提供することになります。 –

+0

CやC++が必要なのですか?あなたの質問は矛盾しています。一方の側では、C/C++の解決策を求めるあなたの質問には、g ++コンパイラを使用していることを反対側にC++タグがあります。 –

+0

あなたの質問に対する答えはいいえ、あなたが求めていることは 'C++標準ライブラリ'にあります。たぶん、 'std :: vector'に似たものを実装する別のライブラリを見つけることができます。 – Galik

答えて

0

はい、Number* var[];またはNumber** var;です。ケースが閉じられました:

EDIT:ああ、あなたはC++にスワップしました...自分自身を頭痛から救い、std :: vectorを使用します。まあ...あなたは自分のVectorをCでも作成できますが、テンプレートは作成できません。

+0

あなたの解決策を使い終わったので、他の人にも感謝しました。 GitHubのArduinoのためのベクトル実装では、私が修正できなかった非常に奇妙なデータ破損エラーが発生しました。これはまた少し速く、私は少ないメモリ(と特にプログラムメモリ)を使用すると思います。 –

3

Standard C++ For Arduinoを使用できます。それはimplementsそれとstd::vector

、あなたはベクトル

struct Number 
{ 
    int x; 
    int y; 
}; 

using MultiNum = std::vector<std::vector<Number>>; 

のベクトルを使用することができますしかし、それはArduinoののメモリが本当に小さい、ということに値する注目すべきである、とあなたが本当にあなたに上限を持っている必要がありますメモリ使用量。スマートにいくつかのメモリを浪費することreserveを使用せずにvectorvector ...

別のオプションは次のとおりです。原因

Number x[][4] = 
    { 
    { {0,0}, {0,1} }, 
    { {0,0}, {0,1}, {1,0}, {0,0} }, 
    { {0,0}, }, 
    { {0,0}, {4,0} } 
    }; 

固定メモリは、コンパイル時にを消費決まりいます。 (A 4×4行列Number)。

0

メモリが気になる場合は、いつでもNumber **varを宣言し、必要なときに手動で領域を割り当てて割り当て直します。