c ++迭代器错误

Jos*_*rad 2 c++ iterator

我有迭代器的问题.你能解释一下为什么这段代码:

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

没问题,使用以下代码:

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

是错的?编译说,*它没有成员开始,但我不知道为什么.

Jam*_*lis 11

运算符优先级.

*it.begin()是一样的*(it.begin()).你需要(*it).begin()(或等效的表达式it->begin()).

也就是说,你需要"调用成员函数begin()的对象指向it",而不是"尊重调用成员函数的结果begin()it"(it有没有成员函数begin(),这就是为什么编译器给你,你得到的错误信息).