为什么我不能这样做?在下面的代码中,我可以从for循环访问,但不能从外部循环访问?
class root
{
string name;
public:
root()
{
}
root(const string& okay)
{
name = okay;
}
void setRoot(const string& okay)
{
name = okay;
}
string getRoot()
{
return name;
}
~root ()
{
}
}; // class root
int main()
{
string a;
vector<root> Root;
vector<root>::iterator oley;
root okay;
for (int i=0; i<5;i++) //this is to add strings in vector
{
cin >> a;
okay.setRoot(a);
Root.push_back(okay);
}
for (oley=Root.begin(); oley!=Root.end(); oley++) //this is to print vectors in scren
{
cout << (*oley).getRoot() << endl;
}
oley = Root.begin();
cout << (*oley + 2).getRoot(); //this is error. What is required to make it legal?
return 0;
}
那么,如果我们可以从for循环访问迭代器,为什么我们不能在非循环代码中这样做呢?
cout << (*oley + 2).getRoot();
答案 0 :(得分:4)
这是因为C++ operator precedence,*oley+2
被解释为(*oley) + 2
,变为root + 2
更新
cout<<(*oley+2).getRoot();
到
cout<<(*(oley+2)).getRoot();
或
cout<<oley[2].getRoot();