欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2021-12-18 16:31:50
...

想用vector实现一个坐标的偶数行逆序叠加,形如贪吃蛇的网络连续。最主要的应用比如对XY平台的运动,按照此坐标排序进行移动会节省工序与时间。
vector的assign和insert操作实现坐标正逆序添加
我们已经生成好了一个坐标序列的vector
vector的assign和insert操作实现坐标正逆序添加
具体方法可以参考之前写的另外一篇博客,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操作实现坐标正逆序添加
vector的assign和insert操作实现坐标正逆序添加

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

#include <vector>
#include <iostream>

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++ 算法