diff --git a/main.cpp b/main.cpp index dff0e530d9b6cb7074a25bfa1218e7d9482c5732..9a473bdfc1f9b5ae305bc64da0e20bd245ffe03e 100644 --- a/main.cpp +++ b/main.cpp @@ -16,13 +16,16 @@ private: int ID; public: - node(T&& t):t(t),ID(_id++){} + node(T&& t):t(std::move(t)),ID(_id++){} node(const T& t):t(t),ID(_id++){} - node(node&)=delete; + node(const node&)=delete; node(node&&)=default; + node& operator=(const node&)=delete; + node& operator=(node&&) =default; + T& data() { return t; } int id() { return ID; } @@ -32,9 +35,9 @@ private: class connection { public: - connection(node* a, node *b):A(a),B(b){} node * A; node * B; + connection(node* a, node *b):A(a),B(b){} }; std::vector<node> nodes{}; @@ -44,7 +47,9 @@ public: graph(){} - node& add_node(T &&t) { nodes.push_back(node(std::move(t))); } + node& add_node(T &&t) { + nodes.push_back(node(std::move(t))); + } node& add_node(T& t) {nodes.push_back(node(t));} @@ -54,22 +59,27 @@ public: { bool foundn=false; bool foundo=false; + std::cout<<std::endl<<n.id()<<std::endl; for(auto& i : nodes) { + std::cout<<std::endl<<i.id()<<std::endl; if(i.id()==n.id()) foundn=true; if(i.id()==o.id()) foundo=true; } if(!foundn || !foundo) + { + std::cout<<foundn<<":"<<foundo; return; + } connections.push_back(connection{&n,&o}); } void erase(node& n) { - for(auto i =std::begin(connections);i!=std::end(connections);i++) + for(auto&& i =std::begin(connections);i!=std::end(connections);i++) if( i->A->id() == n.id() || i->B->id() == n.id() ) if(i==std::begin(connections)) { @@ -80,7 +90,7 @@ public: else connections.erase(i); - for(auto i =std::begin(nodes);i!=std::end(nodes);i++) + for(auto&& i =std::begin(nodes);i!=std::end(nodes);i++) if(i->id()==n.id()) if(i==std::begin(nodes)) { @@ -98,7 +108,7 @@ public: std::vector<node*> get_childs(node& n) { std::vector<node*> ret{}; - for(auto i : connections) + for(auto& i : connections) { if(n.id()==i.A->id()) ret.push_back(i.B); @@ -120,9 +130,10 @@ int main() auto& t2=g.add_node(6); std::cout<<g[0].data(); auto& t = g.add_node(52); + std::cout<<std::endl<<t.id()<<std::endl; g.connect(t,g[0]); //g.connect(t,t2); - std::cout<<g.get_childs(t).size(); + std::cout<<std::endl<<g.get_childs(t).size(); g.erase(t); return 0; } \ No newline at end of file