如何从向量指针读取元素?

时间:2012-07-20 22:02:24

标签: c++ visual-c++ vector c++03

我需要访问矢量指针元素,我的动画结构有以下代码(这里简化了,不必要的变量被截断):

struct framestruct {
    int w,h;
};
struct animstruct {
    vector<framestruct> *frames;
};

vector<framestruct> some_animation; // this will be initialized with some frames data elsewhere.

animstruct test; // in this struct we save the pointer to those frames.

void init_anim(){
    test.frames = (vector<framestruct> *)&some_animation; // take pointer.
}

void test_anim(){
    test.frames[0].w; // error C2039: 'w' : is not a member of 'std::vector<_Ty>'
}

阵列工作,我测试了它: test.frames->size(),按照我的计划,它是7。

那么如何在向量的第N个索引处访问向量元素(w和h)?

2 个答案:

答案 0 :(得分:5)

您需要在访问数组之前取消引用指针。就像您使用->运算符来获取大小一样。

(*test.frames)[0].w;

您可以使用->运算符来访问[]运算符方法,但语法并不好:

test.frames->operator[](0).w;

如果您希望能够在语法上直接使用[]像真正的向量,那么您可以允许frames成员获取vector的副本,它可以参考vector。或者,您可以对[]本身上的animstruct重叠,以使用[]变量上的test语法。

拷贝:

struct animstruct { vector<framestruct> frames; };
animstruct test;
void init_anim(){ test.frames = some_animation; }

test.frames[0].w;

参考:

struct animstruct { vector<framestruct> &frames;
                    animstruct (vector<framestruct> &f) : frames(f) {} };
animstruct test(some_animation);
void init_anim(){}

test.frames[0].w;

过载:

struct animstruct { vector<framestruct> *frames;
                    framestruct & operator[] (int i) { return (*frames)[i]; } };
animstruct test;
void init_anim(){ test.frames = &some_animation; }

test[0].w;

答案 1 :(得分:1)

test.frames指向一个向量,因此在索引到向量之前需要取消引用它。

(*test.frames)[0].w