当前位置:C++技术网 > 资讯 > 向量中保存坐标点 如何取值点的横纵坐标

向量中保存坐标点 如何取值点的横纵坐标

更新时间:2016-08-09 10:28:01浏览次数:1+次

定义一个由点组成的 向量,每个点都有 X和Y坐标,问题是如何取出向量中所有点的横纵坐标?

// 存值

vector < CPoint > points1;
for (int x = 0; x < numPoints; x++)
{
     for (int i = 0; i < 10; i++)
    {

           float xtmp = (float)x + 0.1*i;

           float ytmp = (float)x + 0.1*i;
          points1.push_back(CPoint(xtmp, ytmp));
    }
}

//取值并绘图 : 绘图函数 

    int j = 0;

    for(int x = 0; x<numPoints; x++)

     {

         pLineSeriel->AddPoints(point1.at(j).x,points1.at(j).y,numPoints);

         j++;

     }

错误提示:向量中的点是int型,而函数的形参要求double 型,然后是感觉这种向量取值的方式不正确,该如何处理?


C++技术网解答:

    这是vector基本使用问题,最好专门去学习一下,否则还会有更多使用问题,编码效率太低。

    下面是简单的使用示例:

vector<CPoint> ptArr;
int x = ptArr[0].x;
int y = ptArr[0].y;
     你可以直接将vector当做数组使用,直接用[]操作符来使用vector。

    函数要求的是double,vector存储的是int,你知道的,double兼容int。所以,直接给double传入int值没有任何问题。因为小数字传给大数字,小范围传给大范围,是不会有数据丢失的。

    当然,因为都是用double来存储坐标,所以,可能再存储时会遇到小数存储到int中的情况,这样就是double赋值给int,就会截断小数部分,产生数据丢失。那么解决这个问题的办法就是:重新定义一个点结构体。

    我们现在用的CPoint类定义如下:

class CPoint
{
    int x;
    int y;
    //操作的成员函数
};
     我们可以自己定义一个简单的点结构体就可以替换CPoint了。定义如下:

struct POINT
{
    double x;
    double y;
};
     这样,代码中用POINT替换CPoint就可以解决int和double转化的问题了。这是推荐的方法。

    问题中说的vector的at()函数的使用,也是可以的。主要的问题就是要认真学习一下vector的使用。错误提示是数据类型不匹配。下次提供错误提示要提供错误信息的原样描述。