C++ 迭代器错误

c++ iterator error

本文关键字:错误 迭代器 C++      更新时间:2023-10-16

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

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() );
}

错了?编译器说*它没有成员开始,但我不知道为什么。

运算符优先级。

*it.begin()*(it.begin())相同。 您需要(*it).begin()(或等效表达式,it->begin() (。

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

运算符 "." 的绑定力强于运算符 "*"。尝试

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是一个简单的迭代器。