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);
}

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

ティア

4

2 に答える 2

8

1 つの簡単な方法:

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

終わり!

于 2012-04-24T01:49:42.800 に答える
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'};

それぞれをコンテナーに入れてから、それらのコンテナーを別のコンテナーに入れたいですか?

//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

しかし、私たちはもっと良いことをすることができます。構造体を両端キューにプッシュしながら、両端キューをベクターにプッシュしながら、構造体を初期化しましょう。

//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 を使用している場合は、次のフラグでコンパイルします。

g++ -std=c++0x -o メイン main.cpp

于 2012-04-24T05:11:39.260 に答える