vector的assign和insert操作实现坐标正逆序添加

想用vector实现一个坐标的偶数行逆序叠加,形如贪吃蛇的网络连续。最主要的应用比如对XY平台的运动,按照此坐标排序进行移动会节省工序与时间。
vector的assign和insert操作实现坐标正逆序添加_第1张图片
我们已经生成好了一个坐标序列的vector
在这里插入图片描述
具体方法可以参考之前写的另外一篇博客,vector存储坐标
现在我们需要把这个vector类比到坐标系中,做到坐标点的连续,实现如贪吃蛇的效果。
首先需要我们用到vector的三个操作方法。
assign
void assign(const_iterator first,const_iterator last);

首先assign是将一个vector复制到另外一个vector,将区间[first,last)的元素赋值到当前的vector容器中。
比如:

Mypoints2.assign(Mypoints.begin(), Mypoints1.end());

当然我们可以在first和last索引下添加数字实现下标的变化。(实现将原始数组的前6个复制到新数组中)

Mypoints2.assign(Mypoints1.begin() , Mypoints1.begin() + 6 );

insert
vector向量容器中使用insert()方法,可以对vector的任意位置前插入一个新的元素
vector.insert(pos,n,elem); //在pos位置插入n个elem数据,无返回值。
vector.insert(pos,beg,end); //在pos位置插入[beg,end)区间的数据,无返回值

 Mypoints2.insert(Mypoints2.end(), Mypoints.begin(), Mypoints.begin()+3);

在Mypoints2数组的尾部添加Mypoints数组的前三个元素。

reverse
实现数组的反转。

Mypoints1.assign(Mypoints.begin(), Mypoints.end());//原始数组
reverse(Mypoints.begin(), Mypoints.end());//对Mypoints进行反转

vector的assign和insert操作实现坐标正逆序添加_第2张图片
vector的assign和insert操作实现坐标正逆序添加_第3张图片

对这三个方法进行组合,实现对坐标点的连续。
vector的assign和insert操作实现坐标正逆序添加_第4张图片
代码如下:

#include 
#include 

using namespace std;
struct MyPoint //创建点的数据
{
	double x;
	double y;
};


int main()
{
	vector<MyPoint>Mypoints;//创建点的数组
	vector<MyPoint>Mypoints1,Mypoints2;
	MyPoint mypoint;//实例化的点
	int  x = 1;
	int y = 1;
	int x1;
	int y1;
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 3; j++)
		{
			x1 = x + 2 * j;
			mypoint.x = x1;
			y1 = y + 3 * i;
			mypoint.y = y1;
			Mypoints.push_back(mypoint);
			cout  <<"("<<x1<<" "<< y1 <<")"<<"  ";
		}
		cout << endl;
	}
	//翻转数组
	Mypoints1.assign(Mypoints.begin(), Mypoints.end());//原始数组
	reverse(Mypoints.begin(), Mypoints.end());


	
	for (int i = 0; i < 3; i++)//进行奇偶行数判断
	{
		if (i == 0)
		{
			Mypoints2.assign(Mypoints1.begin() + 3 * i, Mypoints1.begin() + 3 * (i + 1));
		}
		
		if (i%2!=0)
		{
			Mypoints2.insert(Mypoints2.end(), Mypoints.begin() + 3*i, Mypoints.begin() + 3*(i+1));
		}
		if (i%2==0&&i>0)
		{
			Mypoints2.insert(Mypoints2.end(), Mypoints1.begin() + 3 * i, Mypoints1.begin() + 3 * (i + 1));
		}
	}
	
	

	system("pause");
}

这个方法有些多余复杂,但是暂时还没有试出合适的方法如果有欢迎大神评论留言啊

你可能感兴趣的:(c++,算法)