数据丢失的问题

ssssss1123124 2011-05-31 04:27:15
class Vertex;

class Edge
{
Vertex* vertexes[2];
Edge(Vertex* one, Vertex* two);
}
class Face
{
Vertex* vertexes[3];
Edge* edges[3];
Face(Vertex*one, Vertex* two, Vertex* three);
setEdge(Edge *e, int count);//edge[count] = e;
}
main()
{
vertexList.push_back(vertexOne);
vertexList.push_back(vertexTwo);
vertexList.push_back(vertexThree); vertexIter = vertexList.begin();

Edge e1(vertexList, vertexList + 1);
Edge e2(vertexList + 1, vertexList + 2);
Edge e3(vertexList, vertexList + 2);

Face face(vertexIter, vertexIter + 1, vertexIter + 2);
edgeIter = edgeList.begin();
edgeList.push_back(e1);
face.setEdge(edgeIter);
edgeList.push_back(e2);
face.setEdge(edgeIter + 1); //此时 会出现edges[0]消失的现象
edgeList.push_back(e3);
face.setEdge(edgeIter + 2); //此时 仅有edges[2]中的数据还存在
}
创建3个vector分别存vertex、edge、face对象:vertexList、edgeList、faceList
创建3个vertex对象存入vertexList
然后利用vertexList的iterator创建3个edge对象,将他们存入edgeList
最后创建Face对象face,通过setEdge,利用edgeList的iterator做指针,将edgeList中的三个边先后注入face中,
这时出现了问题:注入第一个edges[0]成功,但当我继续注入时,会出现face中的edges[0]丢失的现象,
最后仅仅edges[3]中还有值,请问这是怎么回事,是由于何处生成了临时变量吗,求解释
...全文
144 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ssssss1123124 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 shaotine_wu 的回复:]

看看是不是迭代器失效造成的
[/Quote]
如何查看是不是迭代器失效呢 又如何解决
shaotine_wu 2011-05-31
  • 打赏
  • 举报
回复
看看是不是迭代器失效造成的
ssssss1123124 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 dizuo 的回复:]

引用 3 楼 amazon_eagle 的回复:

引用 2 楼 dizuo 的回复:

Edge e1(vertexList, vertexList + 1); //是vertexIter + 1吧?下面同理
Edge e2(vertexList + 1, vertexList + 2);
Edge e3(vertexList, vertexList + 2);


是的 ……
[/Quote]

我的意思是我在帖子里写错了 呵呵 程序里对的 那个问题仍然存在
ryfdizuo 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 amazon_eagle 的回复:]

引用 2 楼 dizuo 的回复:

Edge e1(vertexList, vertexList + 1); //是vertexIter + 1吧?下面同理
Edge e2(vertexList + 1, vertexList + 2);
Edge e3(vertexList, vertexList + 2);


是的 是我不小心写错了
[/Quote]
以后认真点,,
ssssss1123124 2011-05-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dizuo 的回复:]

Edge e1(vertexList, vertexList + 1); //是vertexIter + 1吧?下面同理
Edge e2(vertexList + 1, vertexList + 2);
Edge e3(vertexList, vertexList + 2);
[/Quote]

是的 是我不小心写错了
ryfdizuo 2011-05-31
  • 打赏
  • 举报
回复
Edge e1(vertexList, vertexList + 1); //是vertexIter + 1吧?下面同理
Edge e2(vertexList + 1, vertexList + 2);
Edge e3(vertexList, vertexList + 2);
ssssss1123124 2011-05-31
  • 打赏
  • 举报
回复
我自己觉得可能是哪里用到了临时变量 后来就销毁了 但是明明都用的iterator做参数的啊 求高手指点

64,652

社区成员

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

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