Вы должны использовать insert
, чтобы заполнить вектор различными массивами.Вот как вы должны это сделать.
//initialized with one array
std::vector<KeyPair> vMasterList(gTestMenu, gTestMenu + 3);
//adding more items
vMasterList.insert( vMasterList.end(), gBrowseMenu , gBrowseMenu + 3);
А затем переопределить вашу pressKeyPair
функцию, чтобы вы могли использовать std::for_each
из <algorithm>
заголовочного файла как,
//pressKeyPair will be called for each item in the list!
std::for_each(vMasterList.begin(), vMasterList.end(), pressKeyPair);
Вот как вы можете написать функцию pressKeyPair
:
void pressKeyPair(KeyPair &keyPair) //takes just one item!
{
//press key pair!
}
На мой взгляд, это лучший дизайн, так как он больше не нуждается в "ручном" цикле на вызывающем сайте!
Вы даже можете позвонить pressKeyPair
для первых 5 элементов списка следующим образом:
//pressKeyPair will be called for first 5 items in the list!
std::for_each(vMasterList.begin(), vMasterList.begin() + 5, pressKeyPair);
Еще один пример:
//pressKeyPair will be called for 5 items after the first 5 items, in the list!
std::for_each(vMasterList.begin()+5, vMasterList.begin() + 10, pressKeyPair);
РЕДАКТИРОВАТЬ:
Если вы хотите использовать ручной цикл, то вы должны использовать это:
std::vector<KeyPair>::iterator it;
for( it = vMasterList.begin(); it != vMasterList.end(); ++it)
{
pressKeyPair(*it);
}
Но я бы сказал, что это не так элегантно, как подход, описанный ранее.Помните, это предполагает, что функция pressKeyPair
имеет такую подпись:
void pressKeyPair(KeyPair &keyPair); //it doesn't accept array!