ошибка итератора c ++ - PullRequest
       1

ошибка итератора c ++

2 голосов
/ 10 января 2012

У меня проблема с итератором. Не могли бы вы объяснить, почему этот код:

vector<vector<int> >::iterator it = v.begin();
for(; it < v.end(); it++)
{
  vector<int> var = *it;
  sort(var.begin(), var.end() );
}

в порядке и с этим кодом:

vector<vector<int> >::iterator it = v.begin();
for(; it < v.end(); it++)
{
  sort(*it.begin(), *it.end() );
}

не так? Компилятор сказал, что * у него нет члена начала, но я не знаю почему.

Ответы [ 2 ]

11 голосов
/ 10 января 2012

Приоритет оператора.

*it.begin() совпадает с *(it.begin()). Вам нужно (*it).begin() (или эквивалентное выражение, it->begin()).

То есть вам нужно "вызвать функцию-член begin() объекта, на который указывает it," not ", задержать результат вызова функции-члена begin() на it" (it не имеет функции-члена begin(), поэтому компилятор выдает сообщение об ошибке, которое вы получаете).

4 голосов
/ 10 января 2012

Оператор "." связывает сильнее, чем оператор "*". Попробуйте

vector<vector<int> >::iterator it = v.begin();
for(; it < v.end(); it++){
   sort(it->begin(), it->end() );
}

вместо.

Ваш код работает так:

vector<vector<int> >::iterator it = v.begin();
for(; it < v.end(); it++)
{
  sort(*(it.begin()), *(it.end()) );
}

и it просто не имеют члена begin, поскольку it - простой итератор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...