从结构的矢量对象

时间:2013-12-18 21:20:19

标签: c++ pointers vector memory-address

我对c ++很陌生,你能指点一下吗?我有一个结构

struct Slice
{
    Slice(): {}
    SliceObj *slObj;
};

和vector:

std::vector<Slice> slices;

所以在mouce touch上我想把这个对象改成他的公共var:

for (vector<Slice>::iterator it = slices.begin(); it != slices.end(); ++it) {

            Slice slice0 = slices[0];
            SliceObj *slObj = slice0.slObj;
            slObj->drag(slObj, x, y);
}

enter image description here

当然,当我使用拖动方法时,可以使用:slObj-&gt; rect.x = x + 0.1 ;,它没有任何好处。

请帮助我,我无法理解如何从矢量中的另一个对象中仔细地获取*,然后小心地改变它的参数; 麻烦在于“如何从slice0小心地获取SliceObj”,而不是var的地址,而是这个实例。 所以在这里我需要获得slObj param,以后我可以使slObj.rect.x = 1;

更新: 当我制作slObj-&gt;拖动方法时,我总是只看到奇怪的数字: enter image description here 但是,当glutPostRedisplay调用时,它会重新绘制方法

void SliceObj::draw(SliceObj *slObj)

然后一切都很好! enter image description here

2 个答案:

答案 0 :(得分:1)

您应该通过迭代器访问该元素:

for (vector<Slice>::iterator it = slices.begin(); it != slices.end(); ++it) {

        Slice& slice0 = *it //Get the element using iterator (Note the reference, is to avoid copy)
        SliceObj *slObj = slice0.slObj;
        slObj->drag(slObj, x, y);
}

但是,如果你有一个支持C ++ 11的编译器,你可以使用基于范围的for循环来简化:

for( auto& slObj : slices )
{
    liceObj *slObj = slice0.slObj;
    slObj->drag(slObj, x, y);
}

答案 1 :(得分:0)

您需要使用迭代器从向量中获取元素。在这里,你总是得到第一个元素。试试这个:

for (vector<Slice>::iterator it = slices.begin(); it != slices.end(); ++it) {

            Slice slice0 = *it //Get the element using iterator
            SliceObj *slObj = slice0.slObj;
            slObj->drag(slObj, x, y);
}