diff --git a/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp b/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp index 34e481dcfc1abb829bc0c596b4342f214c1d1f8e..9c386470ee88f26a2a65470b2214f29edc46613d 100644 --- a/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp +++ b/alib2data_experimental/src/graph/directed/AdjacencyListDirectedGraph.cpp @@ -235,13 +235,15 @@ bool AdjacencyListDirectedGraph::removeNode( const Node & node ) DirectedGraph::removeNode(node); - for (auto& i : edges) { - if (node == i.getFromNode()) { - listRemoveOne(pred[i.getToNode()], node); - edges.erase(i); - } else if (node == i.getToNode()) { - listRemoveOne(succ[i.getFromNode()], node); - edges.erase(i); + for ( auto iter = edges.begin ( ); iter != edges.end ( ); ) { + if (node == iter->getFromNode()) { + listRemoveOne(pred[iter->getToNode()], node); + iter = edges.erase ( iter ); + } else if (node == iter->getToNode()) { + listRemoveOne(succ[iter->getFromNode()], node); + iter = edges.erase ( iter ); + } else { + ++iter; } } diff --git a/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp b/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp index 4edc62476566a48a29505f4651c52e1d5974f135..6caf427762c485b9bc7dff83a02311ed65456ee5 100644 --- a/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp +++ b/alib2data_experimental/src/graph/directed/AdjacencyMatrixDirectedGraph.cpp @@ -234,12 +234,14 @@ bool AdjacencyMatrixDirectedGraph::removeNode( const Node & node ) adj.erase(search); - for (auto& i : edges) { - if (i.getFromNode() == node) { - edges.erase(i); - } else if (i.getToNode() == node) { - adj[i.getFromNode()].erase(node); - edges.erase(i); + for ( auto iter = edges.begin ( ); iter != edges.end ( ); ) { + if (iter->getFromNode() == node) { + iter = edges.erase(iter); + } else if (iter->getToNode() == node) { + adj[iter->getFromNode()].erase(node); + iter = edges.erase(iter); + } else { + ++iter; } } diff --git a/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp b/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp index 47544fdbe3ade07e91335eeb7ffeba44211ccba3..a135a4c31e2ebd8ac99cae6d3dfec51700bb6c3c 100644 --- a/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp +++ b/alib2data_experimental/src/graph/undirected/AdjacencyListUndirectedGraph.cpp @@ -164,13 +164,15 @@ bool AdjacencyListUndirectedGraph::removeNode( const Node & node ) adj.erase(search); UndirectedGraph::removeNode(node); - for (auto& i : edges) { - if (i.getFirstNode() == node) { - listRemoveOne(adj[i.getSecondNode()], node); - edges.erase(i); - } else if (i.getSecondNode() == node) { - listRemoveOne(adj[i.getFirstNode()], node); - edges.erase(i); + for ( auto iter = edges.begin ( ); iter != edges.end ( ); ) { + if (iter->getFirstNode() == node) { + listRemoveOne(adj[iter->getSecondNode()], node); + iter = edges.erase(iter); + } else if (iter->getSecondNode() == node) { + listRemoveOne(adj[iter->getFirstNode()], node); + iter = edges.erase(iter); + } else { + ++ iter; } } diff --git a/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp b/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp index 859b0d7c2ee79158024cdc5b2296728506250450..9a491f95886669d2995e4ea3b39551cf6ff7b76d 100644 --- a/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp +++ b/alib2data_experimental/src/graph/undirected/AdjacencyMatrixUndirectedGraph.cpp @@ -169,13 +169,15 @@ bool AdjacencyMatrixUndirectedGraph::removeNode( const Node & node ) adj.erase(search); UndirectedGraph::removeNode(node); - for (auto& i : edges) { - if (i.getFirstNode() == node) { - adj[i.getSecondNode()].erase(node); - edges.erase(i); - } else if (i.getSecondNode() == node) { - adj[i.getFirstNode()].erase(node); - edges.erase(i); + for ( auto iter = edges.begin ( ); iter != edges.end ( ); ) { + if (iter->getFirstNode() == node) { + adj[iter->getSecondNode()].erase(node); + iter = edges.erase(iter); + } else if (iter->getSecondNode() == node) { + adj[iter->getFirstNode()].erase(node); + iter = edges.erase(iter); + } else { + ++iter; } }