Dans ce cas, tu crées toujours des vecteurs d'itérateurs, pas d'arêtes, et les mêmes problèmes se posent pour leur tri...
Version imprimable
Dans ce cas, tu crées toujours des vecteurs d'itérateurs, pas d'arêtes, et les mêmes problèmes se posent pour leur tri...
J'ai modifié la fonction:
std::vector<int*> edgesdiff(Graph const& g1,Graph const& g2)
retourne la différence entre les arêtes de deux graphe dans un vector,
ici il y a un petit problème que je ne comprends pas, les valeurs insérées sont juste mais lorsque je fais l'affichage pour vérifier j’obtiens les adresses au lieu des valeurs!
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 std::vector<int*> edgesdiff(Graph const& g1,Graph const& g2){ std::vector<edge_iter> v1; std::vector<edge_iter> v2; //std::vector<int [3]> result; std::vector<int*> result = std::vector<int*>(); edge_iter ei, ei_end; for (tie(ei, ei_end) = edges(g1); ei != ei_end; ++ei){v1.push_back(ei);} for (tie(ei, ei_end) = edges(g2); ei != ei_end; ++ei){v2.push_back(ei);} cout<<"***Insertion diff***"<<endl; for(auto x:v1){if(!edgeexistinavector(g1,x,g2,v2)){ int t[3]; vertex_t from = source(*x, g1); t[0]=g1[from].id; cout<<"g1[from].id="<<g1[from].id<<endl; vertex_t to = target(*x, g1); t[1]=g1[to].id; cout<<"g1[to].id="<<g1[to].id<<endl; edge_t edg = edge(from, to, g1); t[2]=g1[edg.first].label; cout<<"g1[edg.first].label="<<g1[edg.first].label<<endl; result.push_back(t); } }
Voila le code source complet: http://pastebin.com/wxTeABhU
Comme result est un vecteur de pointeurs sur int (std::vector<int*>), il est bien normal que tu tombes sur des adresses et pas sur des valeurs...
Si tu veux obtenir les valeurs dans les tableaux sur lesquels les éléments de result pointent, il faut que tu ailles les chercher, par ex:
Code:
1
2
3
4
5
6
7 void afficheValeurs(int* pi) { std::cout << '[' for (unsigned u = 0; u < 3; ++u) { std::cout << pi[u] << " "; } std::cout << ']'; }
Code:
1
2
3
4
5
6 std::cout << '[' for (unsigned u = 0; u < 3; ++u) { std::cout << pi[u] << " "; } std::cout << ']';
ça donne toujours des adresse :( mais le problème à été résolu en utilisant
Merci a vous.Code:std::vector<std::<array<int, 3>>