定义一个由点组成的 向量,每个点都有 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的使用。错误提示是数据类型不匹配。下次提供错误提示要提供错误信息的原样描述。