2012-04-24 10 views
0

はこのような何かを行うことを避けるためにここでとにかくあり:リピート変数の宣言を最適化しますか?

std::queue<myStruct> part1, part2, part3, part4, part5, part6, part7, part8, part9, part10; 

void setup(){ 
myVector.push_back(part1); 
myVector.push_back(part2); 
myVector.push_back(part3); 
myVector.push_back(part4); 
myVector.push_back(part5); 
myVector.push_back(part6); 
myVector.push_back(part7); 
myVector.push_back(part8); 
myVector.push_back(part9); 
myVector.push_back(part10); 
} 

これが唯一の私が50以上の方に上がっていくこともpart10まで行きますが。それは、宣言する必要があるか、またはmyVectorにこれらのキューを宣言し、これらのキューをこのように記述することなく動的に割り当てることができるコーディングの一部ですか?

TIA

答えて

8

一つの簡単な方法:

std::vector<std::queue<myStruct>> myVector(10); 

を完了!

+0

@EricBanderhideは、彼らがしているようキューがデフォルト構築し得ることに注意してくださいあなたの例。 – chris

+0

これはどうですか?私は本当に短い目撃されていますか?変数の名前はどこにありますか?私のような初心者のために十分に役に立たないほど簡単な例ですか? –

+0

@EricBanderhideの場合、キューは 'myVector [index]'または 'myVector.at(index)'を介してアクセスすることができます(後者には範囲外のチェックがあります)。ベクターは配列と似ていて、いくつかの特別な機能とそれにフィットするいくつかの追加機能があります。 – chris

0

あなたの構造体は次のようになります言うことができます:

struct myStruct{ 

    //random variables that your struct may contain 
    int num; 
    std::string str; 
    char ch; 

    //Default Constructor 
    //This allows your to create your structs without specifying any values; 
    myStruct(): 
    num{999},str{"default"},ch{'z'}{} 

    //Parameterized Constructor 
    //This allows you to create your structs with specified values during initialization 
    myStruct(int const numIn, std::string const& strIn, char const chIn): 
    num{numIn},str{strIn},ch{chIn}{} 

}; 

これは、インスタンスに次のように作成することができます:

//calling default constructor 
myStruct part1, part2, part3; 

//calling parameterized constructor 
myStruct part4{4,"4",'4'}, part5{5,"5",'5'}, part6{6,"6",'6'}; 

は今、あなたは、コンテナの中にそれぞれ1を配置し、入れたいですそれらの容器を別の容器に入れますか?

//this is a vector holding one deque holding 6 structs 
vector<deque<myStruct>> vec{{part1,part2,part3,part4,part5,part6}}; 
+-------+ 
| vec | 
|  | 
| [0] | 
+-------+ 
    | 
    \'/ 
+-------+ 
| deq | 
|  |-> part1 
| [0] | 
+-------+ 
| deq | 
|  |-> part2 
| [1] | 
+-------+ 
| deq | 
|  |-> part3 
| [2] | 
+-------+ 
| deq | 
|  |-> part4 
| [3] | 
+-------+ 
| deq | 
|  |-> part5 
| [4] | 
+-------+ 
| deq | 
|  |-> part6 
| [5] | 
+-------+ 


//this is a vector holding 6 deques each holding 1 struct 
vector<deque<myStruct>> vec2{{part1},{part2},{part3},{part4},{part5},{part6}}; 
+-------++-------++-------++-------++-------++-------+ 
| vec || vec || vec || vec || vec || vec | 
|  ||  ||  ||  ||  ||  | 
| [0] || [1] || [2] || [3] || [4] || [5] | 
+-------++-------++-------++-------++-------++-------+ 
    |  |  |  |  |  | 
    \'/  \'/  \'/  \'/  \'/  \'/ 
+-------++-------++-------++-------++-------++-------+ 
| deq || deq || deq || deq || deq || deq | 
|  ||  ||  ||  ||  ||  | 
| [0] || [0] || [0] || [0] || [0] || [0] | 
+-------++-------++-------++-------++-------++-------+ 
    |  |  |  |  |  | 
    \'/  \'/  \'/  \'/  \'/  \'/ 
    part1 part2 part3 part4 part5 part6 

私たちはさらに良いことができます。 dequeをベクトルにプッシュしながら、構造体をdequeにプッシュしながら構造体を初期化しましょう。

//this is a vector holding one deque holding 6 structs 
vector<deque<myStruct>> vec{{{1,"1",'1'},{2,"2",'2'},{3,"3",'3'},{4,"4",'4'},{5,"5",'5'},{6,"6",'6'}}}; 

//this is a vector holding 6 deques each holding 1 struct 
vector<deque<myStruct>> vec2{{{1,"1",'1'}},{{2,"2",'2'}},{{3,"3",'3'}},{{4,"4",'4'}},{{5,"5",'5'}},{{6,"6",'6'}}}; 

これはすべてC++ 11の初期化機能です。 私はこの記事を読んで慣れておくことをお勧めします。 http://www.informit.com/articles/article.aspx?p=1852519

このようなコードをコンパイルするには、コンパイラが最新であり、適切なライブラリファイルがあることを確認してください。 ご使用のgcc、このフラグでコンパイルした場合:

グラム++ -std = C++ 0xの-oメインmain.cppに

関連する問題