2012-04-24 2 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); 
} 

Хотя это идет только до part10 я могу идти вверх к 50 или более. Является ли это просто частью кодирования, что где-то он должен быть объявлен или есть динамический способ, я могу объявить и назначить их myVector для этих очередей, не записывая их так?

ТИА

ответ

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

Теперь вы хотите поместить каждый в контейнер, а затем положить эти контейнеры в другой контейнер?

//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 (s) в вектор.

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

Смежные вопросы