繁体   English   中英

向量迭代器错误

[英]Vector iterator error

我正在写一个基于Allegro的蛇游戏,并且向量包含蛇的各部分的坐标有问题。

这是删除蛇的最后一个元素并添加一个新元素的函数。 以前我已经声明vector <int> snake_x ; vector <int> snake_y; vector <int> snake_x ; vector <int> snake_y; 而且我也已将向量中的所需数字推迟了。

 void moove_snake(int direction){
switch (direction){
    case UP:
    {
        vector <int>::iterator xIter;
        vector <int>::iterator yIter;
        snake_x.erase(snake_x.begin());
        snake_y.erase(snake_y.begin());
        xIter=snake_x.end();
        yIter=snake_y.end();
        snake_x.push_back(*xIter);
        snake_y.push_back(*yIter-20);
        draw();
        al_flip_display();
        al_rest(0.4);
        break;
    }
    case DOWN:
    {
        vector <int>::iterator xIter;
        vector <int>::iterator yIter;
        snake_x.erase(snake_x.begin());
        snake_y.erase(snake_y.begin());
        xIter=snake_x.end();
        yIter=snake_y.end();
        snake_x.push_back(*xIter);
        snake_y.push_back(*yIter+20);
        draw();
        al_flip_display();
        al_rest(0.4);
        break;
    }
    case LEFT:
    {
        vector <int>::iterator xIter;
        vector <int>::iterator yIter;
        snake_x.erase(snake_x.begin());
        snake_y.erase(snake_y.begin());
        xIter=snake_x.end();
        yIter=snake_y.end();
        snake_x.push_back(*xIter-20);
        snake_y.push_back(*yIter);
        draw();
        al_flip_display();
        al_rest(0.4);
        break;      
    }
    case RIGHT:
    {
        vector <int>::iterator xIter;
        vector <int>::iterator yIter;
        snake_x.erase(snake_x.begin());
        snake_y.erase(snake_y.begin());
        xIter=snake_x.end();
        yIter=snake_y.end();
        snake_x.push_back(*xIter+20);
        snake_y.push_back(*yIter);
        draw();
        al_flip_display();
        al_rest(0.4);
        break;
    }
}

}

当我运行exe文件时,它打开一个错误消息框,指出矢量迭代器不可取消引用。 这是什么意思 ?

    xIter=snake_x.end();
    yIter=snake_y.end();

您无法执行* xIter或* yIter。

返回引用向量容器中的past-the-end元素的迭代器。

过去元素是理论元素,它将跟随向量中的最后一个元素。 它没有指向任何元素,因此不应取消引用。

由于标准库函数使用的范围不包括其闭合迭代器指向的元素,因此该函数通常与vector :: begin结合使用以指定包含容器中所有元素的范围。

如果容器为空,则此函数返回的内容与vector :: begin相同。

您应该使用vector.back()而不是vector.end()vector.back()返回对向量结尾处的值的引用。 或者,您可以使用vector.at(vector.size() - 1)或与vector[vector.size() - 1]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM