OVH Cloud OVH Cloud

Un vecteur dans une structure???

22 réponses
Avatar
Ataya
Voila, tout est dans le titre, je cherche a mettre un vecteur dans une
structure:

Voila mon code:

typedef struct {int xV;
int yV;
vector<tabVoisine>(1); }Ville;



Le message d'erreur:
Impossible de cr=E9er la sp=E9cialisation template depuis
'vector<T,Allocator>'


Je ne comprend pas le message d'erreur, qq'un aurait il une id=E9e,

Merci.

10 réponses

1 2 3
Avatar
Fabien LE LEZ
On 24 Mar 2006 20:18:38 -0800, "Ataya"
:

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 ?

Avatar
Fabien LE LEZ

Une question reste : que doit-on mettre à la place de "QuelqueChose" ?


Si tu ne peux pas répondre toi-même à cette question, explique ce que
tu veux faire, on pourra peut-être t'aider.

Avatar
Etienne Rousee
"Fabien LE LEZ" a écrit ...
On 24 Mar 2006 20:18:38 -0800, "Ataya"
:

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


Avatar
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.

Avatar
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


Avatar
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.




Avatar
Etienne Rousee
"Fabien LE LEZ" a écrit dans le message de
news:
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".


Ok, mais ce n'est pas bien gênant.

--

Etienne



Avatar
Sylvain
Etienne Rousee wrote on 25/03/2006 13:19:
[*] 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.


Avatar
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?
Avatar
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

1 2 3