vector中如何遍历所有数据啊

woshi1514 2013-02-22 09:42:56
各位高手,小弟写了一小段代码,使用opengl绘图的,相关代码在这里,我想遍历vector中的所有元素来画图,但是调试发现出现访问冲突的错误,编译链接没有问题。
for (int i=0;i<(trimesh->vertices.size());i++)
{
glBegin(GL_POINTS);

point[0] = (trimesh->vertices[i][0]);
point[1] = (trimesh->vertices[i][1]);
point[2] = (trimesh->vertices[i][2]);
glVertex3f(point[0], point[1], point[2]);
这是一小段代码,
vector<point> vertices;//vertices是TriMesh类中的vector成员

typedef Vec<3,float> point;

Vec(T x, T y, T z)
{ VEC_STATIC_CHECK(D == 3); v[0] = x; v[1] = y; v[2] = z; }
这些是相关的定义,麻烦高手帮我看看,谢谢了啊,程序一执行到i<(trimesh->vertices.size()就死掉了,提示发生访问冲突。
...全文
443 15 点赞 打赏 收藏 举报
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
huangxiaofei 2013-02-27
vector::iterator啊,这是stl的标准遍历方法吧
  • 打赏
  • 举报
回复
mujiok2003 2013-02-23
引用 13 楼 billzheng 的回复:
引用 12 楼 mujiok2003 的回复:C/C++ code?1234if(trimesh &amp;&amp; !trimester->empty()){ //your code goes here} Why trimesh needs to be a pointer to vector at all????
That may be a design decision, for example, to have move semantec. He asks for a simple fix instead of a new solusion
  • 打赏
  • 举报
回复
billzheng 2013-02-23
引用 12 楼 mujiok2003 的回复:
C/C++ code?1234if(trimesh && !trimester->empty()){ //your code goes here}
Why trimesh needs to be a pointer to vector at all????
  • 打赏
  • 举报
回复
mujiok2003 2013-02-23

if(trimesh && !trimester->empty())
{
  //your code goes here
}
  • 打赏
  • 举报
回复
woshi1514 2013-02-23
感谢各位,我用其他方法画图画出来了。
  • 打赏
  • 举报
回复
tonforce 2013-02-22
楼主可以看看trimesh指针是否正常,遍历vector时尽量用迭代器,比较安全。
  • 打赏
  • 举报
回复
caoh110 2013-02-22

int sz = trimesh->vertices.size(); //在for循环里面每次访问后都会去访问下这个值,将这个值保存下来,避免重复访问
for (int i=0;i<sz;i++)
{
glBegin(GL_POINTS);

point[0]  =  (trimesh->vertices[i][0]);
point[1]  =  (trimesh->vertices[i][1]);
point[2]  =  (trimesh->vertices[i][2]);
glVertex3f(point[0], point[1], point[2]);
  • 打赏
  • 举报
回复
FingerStyle 2013-02-22
trimesh 是不是野指针了
  • 打赏
  • 举报
回复
starytx 2013-02-22
可以使用迭代器进行遍历,vector的话也可以当数组来遍历(角标自增的方法)
  • 打赏
  • 举报
回复
sunriseWang 2013-02-22
看一下 trimesh 指针是否有误
  • 打赏
  • 举报
回复
Kaile 2013-02-22
for(size_t i = 0; i < v.size(); ++i)
  • 打赏
  • 举报
回复
麻浦区保安 2013-02-22
野指针 妥妥的!!!
  • 打赏
  • 举报
回复
无猫皆笼 2013-02-22
好多人都说了,检查指针吧,应该不是vector的问题
  • 打赏
  • 举报
回复
billzheng 2013-02-22
引用 6 楼 woshi1514 的回复:
我在COpenGL类中定义的 TriMesh *trimesh; 在Dialog类中定义了 COpenGL *m_pDisplay; 在对话框原文件中这样来使用的 m_pDisplay->trimesh = new TriMesh; 通过m_pDisplay指针来访问opengl类中的内容,就是读进来三维网格模型,显示程序写在COpenGL类中,就是上面的程序……
Can you post your code properly? It should be a hard issue!
  • 打赏
  • 举报
回复
woshi1514 2013-02-22
我在COpenGL类中定义的 TriMesh *trimesh; 在Dialog类中定义了 COpenGL *m_pDisplay; 在对话框原文件中这样来使用的 m_pDisplay->trimesh = new TriMesh; 通过m_pDisplay指针来访问opengl类中的内容,就是读进来三维网格模型,显示程序写在COpenGL类中,就是上面的程序,是不是在COpenGL类中利用trimesh指针访问那些vector还要定义一下啊,感觉既然在对话框中有m_pDisplay->trimesh = new TriMesh;这样一句,应该trimesh指向了TriMesh类的对象了啊。 按照4楼的方法改了还是不行。
  • 打赏
  • 举报
回复
相关推荐
发帖
C++ 语言
加入

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2013-02-22 09:42
社区公告
暂无公告