请教怎样把一个已赋值的vector中的前一个元素赋给后一个元素

请问怎样把一个已赋值的vector中的前一个元素赋给后一个元素?
我写一个贪食蛇的游戏,因为在游戏中蛇的身长会动态增加,所以我想用vector来记录蛇的每个结点的坐标,但是在改变蛇的坐标(蛇移动)时出了问题,比如向上,就是蛇的第一个结点的纵坐标减一,其余结点的坐标等于它们的前面一个结点的坐标,编程时出了问题。我写了一个测试程序,还是运行错误,请大家帮忙看看。我要做的其实就是相当于在c/c++数组里面的
for(int   i   =   1;   i <n;   i++)
        Num[i]   =   Num[i-1];
Num[0]--;
这样的程序。
我写的测试程序如下(编译器devc++4.9.9.2):#include   <iostream>


#include   <vector>
#include   <iterator>

using   namespace   std;

int   main()
{
        vector <int>   vec;
        int   i;
        for(i   =   0;   i <5;   i++)
                  vec.push_back(i+2);
        for(i   =   0;   i <5;   i++)
        {
                    cout < <vec.at(i) < <endl;
        }
        //将vec内前一个值赋给后一个
        for(i   =   1;   i <5;   i++)
        {
                    vec[i]   =   vec[i-1];
        }  
        vec[0]--;         //vec内第一个值减1
        cout < <endl;
        for(i   =   0;   i <5;   i++)
        {
                    cout < <vec.at(i) < <endl;
        }
        //用assign
        vector <int> ::iterator   itv;
        for(itv   =   vec.begin()+1;   itv!=   vec.end();   itv++)
        {
                        vec.assign(itv,itv--);
        }  
        vec[0]--;
        cout < <endl;
        /*如果把注释去掉编译通过但有运行时错误:
         
        for(i   =   0;   i <5;   i++)
        {
                    cout < <vec.at(i) < <endl;
        }
        */
        system( "pause ");
        return   0;
}


其中我用/**/注释掉的一段如果不注释掉结果是这样的:
2
3
4
5
6

1
2
2
2
2

0

This   application   has   requested   the   Runtime   to   terminate   it   in   an   unusual   way.
Please   contact   the   application 's   support   team   for   more   information.

请问要怎么办?谢谢!

------解决方案--------------------
for(i = 1; i <5; i++)
{
vec[i] = vec[i-1];
}
当然要从后面往前啦。
for(i = 4; i> = 1; --i)

------解决方案--------------------
我大一时候做的时候也遇到这问题 ..呵呵