Итерация по вектору внутри вектора - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь перебрать этот вектор, чтобы выяснить, работает ли у меня функция, которая проверяет имена в векторе.

  typedef struct device_t
    {
        string id;
        vector<string> capabilities;
    } Device;


vector<Device> devices = {
  { .id = "Television", .capabilities = { "audio", "channel" } },
  { .id = "Smart thermostat", .capabilities = { "temperature" } },
  { .id = "Stereo system", .capabilities = { "audio", "music" } },
  { .id = "Kitchen sink", .capabilities = { } },
  { .id = "Paper shredder", .capabilities = { "shredding" } }
};

 vector<Device>::iterator it;

    for (it = devicecheck.begin(); it != devicecheck.end(); it++) {
        std::cout<< *it;
    }

Однако я не знаю, как достичь {.id} часть внутри вектора devices. какие-нибудь советы?

1 Ответ

2 голосов
/ 23 февраля 2020

it->capabilities - это std::vector<std::string> capabilities из Device, на который указывает текущий итератор it. Чтобы выполнить итерацию по capabilities, вы должны сделать:

for (it = devicecheck.begin(); it != devicecheck.end(); it++) {
    for (auto it2 = it->capabilities.begin(); it2 != it->capabilities.end(); it2++)
    {
        std::cout << *it2 << " "; 
    }
}

Если вам не обязательно нужен доступ к самим итераторам (но только к базовому объекту), рассмотрите синтаксис l oop на основе диапазона :

for (auto& device : devicecheck)
{
    for (auto& capability : device.capabilities)
    {
        std::cout << capability << " ";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...