1 //一维 2 #include3 #include 4 using namespace std; 5 6 int main() 7 { 8 int len; 9 cin>>len;10 vector array(len);//声明变长数组11 12 for(int i=0;i 21 #include 22 using namespace std;23 24 int main()25 {26 int num1,//行数27 num2;//列数28 29 cout<<"Please enter the number for row and column: "< > num1 >> num2;31 32 //为二维数组开辟空间33 int **p = new int*[num1];34 for(int i=0; i
调用C++里面的vector 容器,实现变长数组。
why? 因为在用UDP进行数据通信的时候,我不可能把所有的点都发给决策组,那我就需要截取结构体里面的东西,该怎么截取,情况下面函数:
方法一:(通过声明常量数组实现,截取部分)
此种方法从理论上来讲与方法二有异曲同工之妙之妙,我们也也可以获得
uint len = obs*sizeof(Point) + 2; 也就是matrix里面的大小。这样我们就没必要用sizeof(str);多此一举。 但相比较方法二,此方法浪费空间比方法二要多,没有方法二灵活。
1 char str[MAXSIZE+1];
uint len = obs*sizeof(Point) + 2;
2 memset(&str,0,sizeof(str)); 3 memcpy(&str,(char*)&matrix,len);//将matrix里面的值,赋值给str,长度sizeof。与上面刚好相反。
方法二:
1 /***************************UDP发送之前,将结构体转换为字符数组******************************/2 uint len = obs*sizeof(Point) + 2; 3 vectorstr(len); //声明可变数组 ,对于vector来说,vector本身就已经初始化了。不用在用memset()在初始化一遍了。4 // memset(&str,0,sizeof(str)); //初始化,赋值为0 5 memcpy(&str,(char*)&matrix,len);//从结构体matrix里面截取部分长度,并赋值给str数组。
1 iSend=sendto(sClient,(char*)&str,len,0,(struct sockaddr*)&ser,iLen);//udp发送端函数
至此,通过稀疏矩阵,将前方一个大的地图中有障碍物的坐标以及类型,通过稀疏矩阵编码,实际上就是一个结构体数组,然后将此结构体数组截取部分字段变为字符数组,并通过UDP传送过去。(注意:UPD通信,无所谓结构体或者结构体数组,其实直接强制类型转换即可。你可以结构体里面套结构体,但,最好标识非零点的个数,这样容易解包。然后,我们就可以通过所谓的强制类型转换即可。(char *)&buffer,buffer为一个字节数组,或者结构体,或者二维数组名,一维数组名都可以。