Сохраняю с CSV файла в вектор. После этого нужно вывести 5 случайных людей:
vector<vector<string>> Man;
for (int i = 0; i < 5; i++) {
auto k = rand() % Man.size();
for (auto l = Man[k].begin(); l < Man[k].end(); l++) {
cout << Man[k][l] << " "; // ←——— тут ошибка
}
cout << endl;
}
Ошибка:
C2679 бинарный "[": не найден оператор, принимающий правый операнд типа "std::_Vector_iterator<std::_Vector_val<std::_Simple_types<_Ty>>>" (или приемлемое преобразование отсутствует) Project9 c:\users\ost1m1ron\source\repos\project9\project9\source.cpp 107
Ошибка в том, что вы пытаетесь получить значение отправляя в operator[]
не индекс(size_t
), а итератор!!
Когда вы пишите auto l = Man[k].begin()
, это и есть итератор на конкретный элемент, т.е. чтобы получить данные достаточно просто разыменовать итератор.
vector<vector<string>> Man;
for (int i = 0; i < 5; i++)
{
auto k = rand() % Man.size();
for (auto l = Man[k].begin(); l < Man[k].end(); ++l)
{
cout << *l << " "; // SUPERMAN
}
cout << endl;
}
Пару советов:
++i
, а не i++
). Это особенно касается невстроенных типов.l < Man[k].end()
. Вы на каждой итерации вызываете Man::operator[]
и end()
. Лучше будет получить перед внутренним циклом значение end()
и дальше сравнивать. И сравнивать не оператором<
а оператором!=
. for (auto l = Man[k].begin(); l < Man[k].end(); l++) {
cout << Man[k][l] << " ";
}
l это итератор и нельзя его использовать как индекс.
Поэтому нужно поменять на:
for (auto l = Man[k].begin(); l != Man[k].end(); l++) {
cout << *l << " ";
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Пытаюсь освоить pocoНо сбрасывается соединение к локальному хосту
Мне нужно написать програму которая с вектора удаляет диапазон значенийМой код: