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()就死掉了,提示发生访问冲突。
...全文
577 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
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楼的方法改了还是不行。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧