为什么我不能直接在向量迭代器中访问?

时间:2014-04-12 01:37:59

标签: c++

为什么我不能这样做?在下面的代码中,我可以从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();   

1 个答案:

答案 0 :(得分:4)

这是因为C++ operator precedence*oley+2被解释为(*oley) + 2,变为root + 2

更新

cout<<(*oley+2).getRoot();   

cout<<(*(oley+2)).getRoot();   

cout<<oley[2].getRoot();