Voila, tout est dans le titre, je cherche a mettre un vecteur dans une structure:
Un objet de classe std::vector<> est un tableau. Un vecteur est un objet mathématique apparenté, mais aux propriétés assez différentes.
Voila mon code:
typedef struct
Ça, c'est du C. À éviter en C++.
{int xV; int yV;
vector<tabVoisine>(1);
Le problème vient d'ici.
Si tu veux déclarer un tableau d'objets de classe Machin, il faut écrire :
vector<Machin> mon_tableau;
Inutile de préciser la taille -- d'ailleurs, je suis prêt à parier que tu ne la connais pas à l'avance.
Pour résumer, tu devrais déclarer ta classe ainsi :
struct Ville { int xV; int yV; std::vector <QuelqueChose> voisines; };
Une question reste : que doit-on mettre à la place de "QuelqueChose" ? Qu'est-ce que ton tableau doit contenir ?
Peut-être quelque chose comme ça:
struct Ville;
struct Ville { int xV; int yV; std::vector <Ville *> voisines; };
Mais comme il a posté son message à 5 h 18, il faudra peut-être attendre un peu pour qu'il en dise plus...
--
Etienne
Fabien LE LEZ
On Sat, 25 Mar 2006 09:41:34 +0100, "Etienne Rousee" :
struct Ville;
Est-ce obligatoire ?
struct Ville { int xV; int yV;
std::vector <Ville *> voisines;
J'y ai pensé aussi. Mais la relation "est voisine de" est symétrique. Du coup, si v1 et v2 sont voisines, &v1 devrait se trouver dans v2.voisines, et vice-versa. Il y a duplication de l'information, et ça risque d'être assez pénible à gérer.
On Sat, 25 Mar 2006 09:41:34 +0100, "Etienne Rousee"
<etienne@rousee.org>:
struct Ville;
Est-ce obligatoire ?
struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
J'y ai pensé aussi. Mais la relation "est voisine de" est symétrique.
Du coup, si v1 et v2 sont voisines, &v1 devrait se trouver dans
v2.voisines, et vice-versa. Il y a duplication de l'information, et ça
risque d'être assez pénible à gérer.
On Sat, 25 Mar 2006 09:41:34 +0100, "Etienne Rousee" :
struct Ville;
Est-ce obligatoire ?
struct Ville { int xV; int yV;
std::vector <Ville *> voisines;
J'y ai pensé aussi. Mais la relation "est voisine de" est symétrique. Du coup, si v1 et v2 sont voisines, &v1 devrait se trouver dans v2.voisines, et vice-versa. Il y a duplication de l'information, et ça risque d'être assez pénible à gérer.
Etienne Rousee
"Fabien LE LEZ" a écrit ...
On Sat, 25 Mar 2006 09:41:34 +0100, "Etienne Rousee" :
struct Ville;
Est-ce obligatoire ?
Non, mais je préfère, pour des raisons de lisibilité. J'ai comme ça la liste des structures et des classes en un clin d'oeil.
struct Ville { int xV; int yV;
std::vector <Ville *> voisines;
J'y ai pensé aussi. Mais la relation "est voisine de" est symétrique. Du coup, si v1 et v2 sont voisines, &v1 devrait se trouver dans v2.voisines, et vice-versa. Il y a duplication de l'information, et ça risque d'être assez pénible à gérer.
Non, c'est un pointeur. Il suffit qu'il y ait un vecteur de toutes les villes quelque part , et dans chacune d'entre elles, on met seulement les adresses des voisines. Ainsi, il n'y a pas duplication.
Par exemple:
struct Ville; struct Application;
struct Ville { int xV; int yV; std::vector <Ville *> voisines; // Cette structure ne fera que // des affectation de pointeurs };
struct Application { std::vector <Ville *> Villes; // C'est cette structure qui fera les "new" };
--
Etienne
"Fabien LE LEZ" <gramster@gramster.com> a écrit ...
On Sat, 25 Mar 2006 09:41:34 +0100, "Etienne Rousee"
<etienne@rousee.org>:
struct Ville;
Est-ce obligatoire ?
Non, mais je préfère, pour des raisons de lisibilité.
J'ai comme ça la liste des structures et des classes
en un clin d'oeil.
struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
J'y ai pensé aussi. Mais la relation "est voisine de" est symétrique.
Du coup, si v1 et v2 sont voisines, &v1 devrait se trouver dans
v2.voisines, et vice-versa. Il y a duplication de l'information, et ça
risque d'être assez pénible à gérer.
Non, c'est un pointeur. Il suffit qu'il y ait un vecteur de toutes les
villes
quelque part , et dans chacune d'entre elles, on met seulement les
adresses des voisines. Ainsi, il n'y a pas duplication.
Par exemple:
struct Ville;
struct Application;
struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines; // Cette structure ne fera que
// des affectation de
pointeurs
};
struct Application
{
std::vector <Ville *> Villes; // C'est cette structure qui fera les
"new"
};
On Sat, 25 Mar 2006 09:41:34 +0100, "Etienne Rousee" :
struct Ville;
Est-ce obligatoire ?
Non, mais je préfère, pour des raisons de lisibilité. J'ai comme ça la liste des structures et des classes en un clin d'oeil.
struct Ville { int xV; int yV;
std::vector <Ville *> voisines;
J'y ai pensé aussi. Mais la relation "est voisine de" est symétrique. Du coup, si v1 et v2 sont voisines, &v1 devrait se trouver dans v2.voisines, et vice-versa. Il y a duplication de l'information, et ça risque d'être assez pénible à gérer.
Non, c'est un pointeur. Il suffit qu'il y ait un vecteur de toutes les villes quelque part , et dans chacune d'entre elles, on met seulement les adresses des voisines. Ainsi, il n'y a pas duplication.
Par exemple:
struct Ville; struct Application;
struct Ville { int xV; int yV; std::vector <Ville *> voisines; // Cette structure ne fera que // des affectation de pointeurs };
struct Application { std::vector <Ville *> Villes; // C'est cette structure qui fera les "new" };
--
Etienne
Fabien LE LEZ
On Sat, 25 Mar 2006 12:21:56 +0100, "Etienne Rousee" :
Il y a duplication de l'information, et ça
risque d'être assez pénible à gérer.
Non,
Si. J'ai parlé de duplication de l'information[*], pas de duplication des données.
[*] En l'occurence, duplication de l'information "v1 est voisine de v2", sous la forme "v2 est voisine de v1".
si v1 et v2 sont voisines, &v1 devrait se trouver dans v2.voisines, et vice-versa.
On Sat, 25 Mar 2006 12:21:56 +0100, "Etienne Rousee"
<etienne@rousee.org>:
Il y a duplication de l'information, et ça
risque d'être assez pénible à gérer.
Non,
Si. J'ai parlé de duplication de l'information[*], pas de duplication
des données.
[*] En l'occurence, duplication de l'information "v1 est voisine de
v2", sous la forme "v2 est voisine de v1".
si v1 et v2 sont voisines, &v1 devrait se trouver dans
v2.voisines, et vice-versa.
[*] En l'occurence, duplication de l'information "v1 est voisine de v2", sous la forme "v2 est voisine de v1".
Ok, mais ce n'est pas bien gênant.
c'est même, imho, la meilleure façon (la plus rapide, la moins coûteuse) pour permettre de trouver toutes les villes voisines d'une ville quelconque.
mais Fabien a peut être un meilleur algo.
Sylvain.
Ataya
Tout d'abord merci a tous..et bravo! pour votre sens de la déduction!
En effet ma structure correspond a une ville, elle contient ses coordonnées, et un tableau contenant ses villes voisines donc la structure proposée ici correspond bien a ce que je voulait faire:
struct Ville;
struct Ville { int xV; int yV; std::vector <Ville *> voisines;
};
J'ai plusieurs questions... _Est-ce du c++ de déclarer les struct de cette manière? _<Ville*> : est-ce un pointeur? ou alors qu'est-ce que ' * ' vient faire là? _Le fait de faire une de strucuture contenant un tableau de cette meme strucutre pose il un probleme particulier?
Tout d'abord merci a tous..et bravo! pour votre sens de la déduction!
En effet ma structure correspond a une ville, elle contient ses
coordonnées, et un tableau contenant ses villes voisines donc la
structure proposée ici correspond bien a ce que je voulait faire:
struct Ville;
struct Ville
{
int xV;
int yV;
std::vector <Ville *> voisines;
};
J'ai plusieurs questions...
_Est-ce du c++ de déclarer les struct de cette manière?
_<Ville*> : est-ce un pointeur? ou alors qu'est-ce que ' * ' vient
faire là?
_Le fait de faire une de strucuture contenant un tableau de cette meme
strucutre pose il un probleme particulier?
Tout d'abord merci a tous..et bravo! pour votre sens de la déduction!
En effet ma structure correspond a une ville, elle contient ses coordonnées, et un tableau contenant ses villes voisines donc la structure proposée ici correspond bien a ce que je voulait faire:
struct Ville;
struct Ville { int xV; int yV; std::vector <Ville *> voisines;
};
J'ai plusieurs questions... _Est-ce du c++ de déclarer les struct de cette manière? _<Ville*> : est-ce un pointeur? ou alors qu'est-ce que ' * ' vient faire là? _Le fait de faire une de strucuture contenant un tableau de cette meme strucutre pose il un probleme particulier?
Etienne Rousee
"Ataya" a écrit ...
J'ai plusieurs questions... _Est-ce du c++ de déclarer les struct de cette manière?
Oui. Je suppose que tu n'as pas encore vu les classes ?
_<Ville*> : est-ce un pointeur?
Oui.
_Le fait de faire une de strucuture contenant un tableau de cette meme strucutre pose il un probleme particulier?
Non.
--
Etienne
"Ataya" <teisseire.sebastien@gmail.com> a écrit ...
J'ai plusieurs questions...
_Est-ce du c++ de déclarer les struct de cette manière?
Oui.
Je suppose que tu n'as pas encore vu les classes ?
_<Ville*> : est-ce un pointeur?
Oui.
_Le fait de faire une de strucuture contenant un tableau
de cette meme strucutre pose il un probleme particulier?