C++ 如何向向量添加元素并同时遍历它?

C++ 如何向向量添加元素并同时遍历它?,c++,vector,tree,iterator,breadth-first-search,C++,Vector,Tree,Iterator,Breadth First Search,我想在一棵树上执行BFS,找出某片叶子,但图形本质上是动态的,当我落在一片叶子上,而那片叶子不是我要找的,那么它的子元素是从叶子计算出来的。叶子不再是叶子,而是节点。 我尝试了两种实现,结果都很糟糕。我认为指针正在失效,或者这是一个不正确的实现。我的代码如下 int y=0; while(graph.end() - graph.begin() < 262145 and graph.end() - graph.begin() < y){ if(found(gra

我想在一棵树上执行BFS,找出某片叶子,但图形本质上是动态的,当我落在一片叶子上,而那片叶子不是我要找的,那么它的子元素是从叶子计算出来的。叶子不再是叶子,而是节点。

我尝试了两种实现,结果都很糟糕。我认为指针正在失效,或者这是一个不正确的实现。我的代码如下

int y=0;
while(graph.end() - graph.begin() < 262145  and   graph.end() - graph.begin() < y){
        if(found(graph[y])){
            clock2 = graph[y];
            break;
        }
        else{
        if(graph[y].b[0] < 4) graph.push_back(move1(graph[y]));
        if(graph[y].b[1] < 4) graph.push_back(move2(graph[y]));

    }
    y++;
}
下一个实现是这样的

for(vector<foo> :: iterator i = graph.begin();i!=graph.end();i++){
    if(found(*i)){
        clock2 = *i;
        break;
    }
    else{
        if(i->b[0] < 4) graph.push_back(move1(*i));//move1 and move2 are
        if(i->b[1] < 4) graph.push_back(move2(*i));//functions of return type foo
    }
}

这两种情况都导致了该计划的崩溃。它们有什么问题,如何实施?请用其他问题进行评论。

我也有点困惑,到底发生了什么,你到底在问什么。但是,如果你想知道如何在一个图上预成型一个简单的BFS,这里有一些示例代码,我觉得很容易阅读

进一步评论,我会改变它,以尝试匹配问题的确切标准,一旦我有了更多的明确性

struct node{
   std::vector children<node*>;
   int data;
}
void bfs(node* root, int value){ // THIS IS CHECK FOR INTS so change for whatever value
    if(!root) return;
    std::queue myq;
    myq.push(root);
    node* toCheck;
    while(!myq.Empty()){
         toCheck = myq.top();
         myq.pop();
         if(toCheck->data == value){
              //do whatever you want with that information
         }else{
         /*
          //forloop/whileloop as many times as necessary to set all the new children
           //Example:
              node* newNode = new node();
              newNode->data = someValue; // just some information that you want to add
              toCheck->children.push_back(newNode);
         */
         }
         for(int i = 0; i < toCheck->children.size(); i++){
              myq.push(toCheck->children[i]);
         }
    }
}

可能的重复项您不能使用vector,因为某些插入可能会使迭代器无效,例如当大小超过容量时。在第一个代码段中,这看起来不正确:graph.end-graph.begin这是什么幻数?graph.end-graph.begin<262145指定树的最大允许大小。。。4^9+1准确地说,我已经编辑了我的问题。看看你现在是否能更好地理解等等,这样树就不会造了?您决定在什么条件下创建更多节点?有多少节点?这棵树已经平了吗?已经在向量中了?i、 e不需要处理左/右只通过向量运行?树尚未生成。当当前节点不是我要搜索的节点时,我会添加更多节点。也就是说,假设我试图猜测密码,因为不必画很多分支,让我们考虑它是二进制的,我会这样做。是0,是吗?好的不是1号吗。对好的不现在是6点吗?对好的不是01吗?因此,forth…@Jay,看在上帝的份上,它不是一棵二叉树。。。每个节点最多可以有9个子节点。嘿,不管它是不是二叉树。二叉树是图的子集。我只是以它为例。我修正了密码。告诉我我是否在正确的轨道上。