指向C ++中指针向量的指针

时间:2019-04-21 06:29:51

标签: c++ pointers iterator

我正在学习C ++,在我的作业中遇到了类似的情况。我尝试解决此问题的每一个尝试都带有一些问题,因此我在这里进行了简化。

在这种情况下,我将使用此类:

class Story {
    string _title;

    //a simple getter
    string getTitle(){ 
        return _title;
    }
};

现在在我的主函数中,我有stories,这是一个指向Story的向量的指针:

vector<Story *> * stories = function();

我的目标是访问向量中第一个_title的{​​{1}}(向量大小将始终大于0)。

为此,我尝试了一些我认为可行的方法:

Story

我了解为什么我的尝试2有效,但是我不明白为什么1、1.5和3无效。

以防万一,我使用以下选项进行编译:

//Attempt 1 (doesn't work)
*(stories)[0]->title(); 
    //I thought `*(stories)[0]` returns the first `Story*`
    /** Error message:
     * error: ‘class std::vector<Story*>’ has no member named ‘title’
     */
//Attempt 1.5 (equivalent to Attempt 1)
*(stories).at(0)->title();

//Attempt 2 (works)
stories->at(0)->title(); 
    //Aren't `*(stories).at(0)` and `stories->at(0)` the same?
    //Since Attempt 1.5 failed, there as to be a difference..

//Attempt 3 (doesn't work)
stories->begin()->title(); 
    //I thought `stories->begin()` returns the first `Story*`
    /** Error message:
     * error: request for member ‘title’ in 
     * ‘* stories->std::vector<Story*>::begin().__gnu_cxx::__normal_iterator<Story**, std::vector<Story*> >::operator->()’, which is of pointer type ‘Story*’
     * (maybe you meant to use ‘->’ ?)
     */

2 个答案:

答案 0 :(得分:0)

如果尝试3次,

stories->begin()将返回一个迭代器,以打印存储在迭代器指向的位置的值,尝试类似

*(stories->begin())

答案 1 :(得分:0)

begin返回一个迭代器(指向向量的开头),并且必须取消对该迭代器的引用,以获取其指向的元素。

使用begin()->(或(*stories->begin()))可以取消引用该迭代器,并获得一个Story *,但是Story *没有成员title。因此必须为(*stories->begin())->title()

或使用front,因为它返回对第一个元素的引用。