首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何知道您在std::array中输入的最后一个元素是什么?

如何知道您在std::array中输入的最后一个元素是什么?
EN

Stack Overflow用户
提问于 2012-12-20 02:04:35
回答 2查看 106关注 0票数 1

我正在制作一个mfc应用程序来实现某种程度上的绘图机制。使用折线,用户可以绘制图形,按enter键后,该线的当前点将连接到起始点以形成闭合多边形。我想你明白我的意思了。现在,我使用STL数组来存储多边形的每个顶点-简单地说,在绘制图形时单击鼠标左键的每个点都存储在该数组中。

代码语言:javascript
复制
std::array<CPoint,11> v;   //vertices

我使用以下机制来输出这个数组的元素,即points:

代码语言:javascript
复制
  for(int j=0 ; j<v.size() ; j++ )
    {
        s.Format(L"%d %d\n",v[j].x, v[j].y);
        aDC.TextOutW(x+=20,y+=20,s );     //each time print the coordinates
        s=" ";                                    //at a different location
    }

在执行过程中,当用户通过单击屏幕周围的点来绘制图形时,这些点将存储在数组中。该数组声明了12个元素,但一个形状很少有12个顶点。元素的其余部分(空元素)仍然是(0,0)-但它们在循环中输出。所以我打印的是3-4个坐标和大量的(0,0)。有没有办法只打印那些存储顶点的元素(我希望你明白我的意思)。就像vertices[n]=/*some character that signifies the last element*/一样。我的问题是,这个角色会是什么?例如字符串中的'\0‘。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-20 02:11:22

看起来在CPoint结构中并没有一个很好的“结束标记”候选者:至少在理论上,每一对{x,y}代表一个合法的点。

如果坚持使用固定数组(可能是出于性能原因),还可以将多边形顶点的数量存储在单独的变量中(继续字符串类比,这将是点的"Pascal字符串“,而不是点的"C字符串”)。

如果使用数组不是必需的,那么您可能希望切换到std::vector<CPoint>,这是一种更适合表示可变大小的结构的容器,例如多边形。

最后,您可以将一个点指定为非法的(例如,在{std::numeric_limits<long>::max(), std::numeric_limits<long>::max()}),静态地创建该点的一个实例,并将其用作序列结束标记。在这种情况下,请考虑将数组扩展一,并使用结束标记作为标记。

票数 2
EN

Stack Overflow用户

发布于 2012-12-20 02:19:26

好吧,如果您打算将(0; 0)点作为无效使用,那么您可以只检查一个点是否在(0; 0)

代码语言:javascript
复制
if (vertices[i].x != 0 && vertices[i].y != 0) {
    // valid
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13958380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档