请教怎样把一个已赋值的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)
------解决方案--------------------
我大一时候做的时候也遇到这问题 ..呵呵
我写一个贪食蛇的游戏,因为在游戏中蛇的身长会动态增加,所以我想用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)
------解决方案--------------------
我大一时候做的时候也遇到这问题 ..呵呵