Ошибка C2679 («не найден оператор…»)

341
11 октября 2018, 19:40

Сохраняю с 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
Answer 1

Ошибка в том, что вы пытаетесь получить значение отправляя в 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;
}

Пару советов:

  1. Используйте префиксный инкремент (++i, а не i++). Это особенно касается невстроенных типов.
  2. Вы пишите в условии цикла l < Man[k].end(). Вы на каждой итерации вызываете Man::operator[] и end(). Лучше будет получить перед внутренним циклом значение end() и дальше сравнивать. И сравнивать не оператором< а оператором!=.
Answer 2
 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 << " "; 
}
READ ALSO
Refused исключения для локального хоста

Refused исключения для локального хоста

Пытаюсь освоить pocoНо сбрасывается соединение к локальному хосту

159
Large string engaged exception

Large string engaged exception

Доброго времени суток!

418
Как из std::vector удалить диапазон элементов?

Как из std::vector удалить диапазон элементов?

Мне нужно написать програму которая с вектора удаляет диапазон значенийМой код:

168
Не могу реализовать функцию

Не могу реализовать функцию

Я создаю такую функцию

190