salut,
j'ai la classe suivante :
class C_Coup
{
private:
vector<string> tab;
public:
vector<string>::iterator iter;
vector<string>::const_iterator citer;
vector<string>::iterator iter_fin;
vector<string>::const_iterator citer_fin;
C_Coup();
int indice(const string s);
};
j'ai pas envie que l'utilisateur touche a mon vector, donc je le mets en
private, je lui donne accès a des iterator pour qu'il puisse se déplacer
dans le vector.
j'ai sur ceci, quelques questions :
est-il possible de coder un objet qui serai constant mais qui proposerai
des iterator sur ses membres ? avec le peu de connaissances que j'ai je
dirais que non car objet constant implique iterator membre constant
implique iterator inutilisable ... ??
Ton message est un peu flou...
salut,
j'ai la classe suivante :
class C_Coup
{
private:
vector<string> tab;
public:
vector<string>::iterator iter;
vector<string>::const_iterator citer;
vector<string>::iterator iter_fin;
vector<string>::const_iterator citer_fin;
C_Coup();
int indice(const string s);
};
j'ai pas envie que l'utilisateur touche a mon vector, donc je le mets en
private, je lui donne accès a des iterator pour qu'il puisse se déplacer
dans le vector.
j'ai sur ceci, quelques questions :
est-il possible de coder un objet qui serai constant mais qui proposerai
des iterator sur ses membres ? avec le peu de connaissances que j'ai je
dirais que non car objet constant implique iterator membre constant
implique iterator inutilisable ... ??
Ton message est un peu flou...
salut,
j'ai la classe suivante :
class C_Coup
{
private:
vector<string> tab;
public:
vector<string>::iterator iter;
vector<string>::const_iterator citer;
vector<string>::iterator iter_fin;
vector<string>::const_iterator citer_fin;
C_Coup();
int indice(const string s);
};
j'ai pas envie que l'utilisateur touche a mon vector, donc je le mets en
private, je lui donne accès a des iterator pour qu'il puisse se déplacer
dans le vector.
j'ai sur ceci, quelques questions :
est-il possible de coder un objet qui serai constant mais qui proposerai
des iterator sur ses membres ? avec le peu de connaissances que j'ai je
dirais que non car objet constant implique iterator membre constant
implique iterator inutilisable ... ??
Ton message est un peu flou...
j'ai la classe suivante :
class C_Coup
{
private:
vector<string> tab;
public:
vector<string>::iterator iter;
vector<string>::const_iterator citer;
vector<string>::iterator iter_fin;
vector<string>::const_iterator citer_fin;
C_Coup();
int indice(const string s);
};
j'ai pas envie que l'utilisateur touche a mon vector, donc je le mets
en private, je lui donne accès a des iterator pour qu'il puisse se
déplacer dans le vector.
j'ai sur ceci, quelques questions :
est-il possible de coder un objet qui serai constant mais qui
proposerai des iterator sur ses membres ? avec le peu de connaissances
que j'ai je dirais que non car objet constant implique iterator membre
constant implique iterator inutilisable ... ??
la chose suivante est-elle possible ?
class C_Coup
{
private:
vector<string> tab;
public:
typedef vector<string>::iterator iter;
typdef vector<string>::const_iterator citer;
typedef vector<string>::iterator iter_fin;
typdef vector<string>::const_iterator citer_fin;
C_Coup();
int indice(const string s);
};
si oui, dans quelles conditions puis-je utiliser mes nouveaux types ?
1) dans le codage de mes méthodes ?
2) dans toute fonction utilisant un objet C_Coup ?
autre question, celle ci relève un peu plus de la technique de
programmation avec ces outils, est-ce que ce genre de classe est une
bonne méthode pour restreindre l'accès a un tableau en laissant
possible des manipulations dessus ?
j'ai la classe suivante :
class C_Coup
{
private:
vector<string> tab;
public:
vector<string>::iterator iter;
vector<string>::const_iterator citer;
vector<string>::iterator iter_fin;
vector<string>::const_iterator citer_fin;
C_Coup();
int indice(const string s);
};
j'ai pas envie que l'utilisateur touche a mon vector, donc je le mets
en private, je lui donne accès a des iterator pour qu'il puisse se
déplacer dans le vector.
j'ai sur ceci, quelques questions :
est-il possible de coder un objet qui serai constant mais qui
proposerai des iterator sur ses membres ? avec le peu de connaissances
que j'ai je dirais que non car objet constant implique iterator membre
constant implique iterator inutilisable ... ??
la chose suivante est-elle possible ?
class C_Coup
{
private:
vector<string> tab;
public:
typedef vector<string>::iterator iter;
typdef vector<string>::const_iterator citer;
typedef vector<string>::iterator iter_fin;
typdef vector<string>::const_iterator citer_fin;
C_Coup();
int indice(const string s);
};
si oui, dans quelles conditions puis-je utiliser mes nouveaux types ?
1) dans le codage de mes méthodes ?
2) dans toute fonction utilisant un objet C_Coup ?
autre question, celle ci relève un peu plus de la technique de
programmation avec ces outils, est-ce que ce genre de classe est une
bonne méthode pour restreindre l'accès a un tableau en laissant
possible des manipulations dessus ?
j'ai la classe suivante :
class C_Coup
{
private:
vector<string> tab;
public:
vector<string>::iterator iter;
vector<string>::const_iterator citer;
vector<string>::iterator iter_fin;
vector<string>::const_iterator citer_fin;
C_Coup();
int indice(const string s);
};
j'ai pas envie que l'utilisateur touche a mon vector, donc je le mets
en private, je lui donne accès a des iterator pour qu'il puisse se
déplacer dans le vector.
j'ai sur ceci, quelques questions :
est-il possible de coder un objet qui serai constant mais qui
proposerai des iterator sur ses membres ? avec le peu de connaissances
que j'ai je dirais que non car objet constant implique iterator membre
constant implique iterator inutilisable ... ??
la chose suivante est-elle possible ?
class C_Coup
{
private:
vector<string> tab;
public:
typedef vector<string>::iterator iter;
typdef vector<string>::const_iterator citer;
typedef vector<string>::iterator iter_fin;
typdef vector<string>::const_iterator citer_fin;
C_Coup();
int indice(const string s);
};
si oui, dans quelles conditions puis-je utiliser mes nouveaux types ?
1) dans le codage de mes méthodes ?
2) dans toute fonction utilisant un objet C_Coup ?
autre question, celle ci relève un peu plus de la technique de
programmation avec ces outils, est-ce que ce genre de classe est une
bonne méthode pour restreindre l'accès a un tableau en laissant
possible des manipulations dessus ?
Ton message est un peu flou...
Je ne comprends pas ce que tu veux faire...
Pourquoi est ce que tu ne créer pas deux méthodes qui retourne un const_it
pointant sur begin() et end() ?
const_it indique que l'objet pointé par l'itérateur est constant, pas que
l'itérateur est constant...
Tu veux juste réduire l'interface du vecteur ? C'est ca ?
Pourquoi ne pas faire :
class C_Coup {
protected:
vector<string> tab;
public:
typedef vector<string>::const_iterator citer;
citer begin() { return tab.begin(); }
citer end() { return tab.end(); }
}; //Code non testé, juste pour l'idée
Un utilisateur pourrait alors y acceder comme un vector normal...
C_Coup c;
for( C_Coup::citer it = c.begin(); it != c.end() ; ++ it )
//Code
Mais il faut résoudre le problème de l'initialisation...
Ton message est un peu flou...
Je ne comprends pas ce que tu veux faire...
Pourquoi est ce que tu ne créer pas deux méthodes qui retourne un const_it
pointant sur begin() et end() ?
const_it indique que l'objet pointé par l'itérateur est constant, pas que
l'itérateur est constant...
Tu veux juste réduire l'interface du vecteur ? C'est ca ?
Pourquoi ne pas faire :
class C_Coup {
protected:
vector<string> tab;
public:
typedef vector<string>::const_iterator citer;
citer begin() { return tab.begin(); }
citer end() { return tab.end(); }
}; //Code non testé, juste pour l'idée
Un utilisateur pourrait alors y acceder comme un vector normal...
C_Coup c;
for( C_Coup::citer it = c.begin(); it != c.end() ; ++ it )
//Code
Mais il faut résoudre le problème de l'initialisation...
Ton message est un peu flou...
Je ne comprends pas ce que tu veux faire...
Pourquoi est ce que tu ne créer pas deux méthodes qui retourne un const_it
pointant sur begin() et end() ?
const_it indique que l'objet pointé par l'itérateur est constant, pas que
l'itérateur est constant...
Tu veux juste réduire l'interface du vecteur ? C'est ca ?
Pourquoi ne pas faire :
class C_Coup {
protected:
vector<string> tab;
public:
typedef vector<string>::const_iterator citer;
citer begin() { return tab.begin(); }
citer end() { return tab.end(); }
}; //Code non testé, juste pour l'idée
Un utilisateur pourrait alors y acceder comme un vector normal...
C_Coup c;
for( C_Coup::citer it = c.begin(); it != c.end() ; ++ it )
//Code
Mais il faut résoudre le problème de l'initialisation...
oui je sais, mais si l'objet dont l'iterateur est constant, alors
l'iterateur lui même devient difficilement exploitable, il est.. constant !
Non, const_iterator n'est pas "const iterator". L'itérateur n'est pas
Tu veux juste réduire l'interface du vecteur ? C'est ca ?
euh en gros oui, c'est ça.
en fait j'ai dans mon programme plusieurs endroits où j'utilise un
vecteur identique, et avec les mêmes opérations dessus, j'ai donc décidé
de créer un objet "C_COUP" qui contient mon vector, et des iterateur
pour le manipuler
En fait, créer des itérateurs dans ta classe limite le nombre d'accès
oui je sais, mais si l'objet dont l'iterateur est constant, alors
l'iterateur lui même devient difficilement exploitable, il est.. constant !
Non, const_iterator n'est pas "const iterator". L'itérateur n'est pas
Tu veux juste réduire l'interface du vecteur ? C'est ca ?
euh en gros oui, c'est ça.
en fait j'ai dans mon programme plusieurs endroits où j'utilise un
vecteur identique, et avec les mêmes opérations dessus, j'ai donc décidé
de créer un objet "C_COUP" qui contient mon vector, et des iterateur
pour le manipuler
En fait, créer des itérateurs dans ta classe limite le nombre d'accès
oui je sais, mais si l'objet dont l'iterateur est constant, alors
l'iterateur lui même devient difficilement exploitable, il est.. constant !
Non, const_iterator n'est pas "const iterator". L'itérateur n'est pas
Tu veux juste réduire l'interface du vecteur ? C'est ca ?
euh en gros oui, c'est ça.
en fait j'ai dans mon programme plusieurs endroits où j'utilise un
vecteur identique, et avec les mêmes opérations dessus, j'ai donc décidé
de créer un objet "C_COUP" qui contient mon vector, et des iterateur
pour le manipuler
En fait, créer des itérateurs dans ta classe limite le nombre d'accès
j'ai la classe suivante :
class C_Coup
{
private:
vector<string> tab;
public:
vector<string>::iterator iter;
vector<string>::const_iterator citer;
vector<string>::iterator iter_fin;
vector<string>::const_iterator citer_fin;
C_Coup();
int indice(const string s);
};
j'ai pas envie que l'utilisateur touche a mon vector, donc je le mets
en private, je lui donne accès a des iterator pour qu'il puisse se
déplacer dans le vector.
j'ai sur ceci, quelques questions :
est-il possible de coder un objet qui serai constant mais qui
proposerai des iterator sur ses membres ?
avec le peu de connaissances que j'ai je dirais que non car objet
constant implique iterator membre constant implique iterator
inutilisable ... ??
la chose suivante est-elle possible ?
class C_Coup
{
private:
vector<string> tab;
public:
typedef vector<string>::iterator iter;
typdef vector<string>::const_iterator citer;
typedef vector<string>::iterator iter_fin;
typdef vector<string>::const_iterator citer_fin;
C_Coup();
int indice(const string s);
};
si oui, dans quelles conditions puis-je utiliser mes nouveaux types ?
1) dans le codage de mes méthodes ?
2) dans toute fonction utilisant un objet C_Coup ?
autre question, celle ci relève un peu plus de la technique de
programmation avec ces outils, est-ce que ce genre de classe est une
bonne méthode pour restreindre l'accès a un tableau en laissant
possible des manipulations dessus ?
j'ai la classe suivante :
class C_Coup
{
private:
vector<string> tab;
public:
vector<string>::iterator iter;
vector<string>::const_iterator citer;
vector<string>::iterator iter_fin;
vector<string>::const_iterator citer_fin;
C_Coup();
int indice(const string s);
};
j'ai pas envie que l'utilisateur touche a mon vector, donc je le mets
en private, je lui donne accès a des iterator pour qu'il puisse se
déplacer dans le vector.
j'ai sur ceci, quelques questions :
est-il possible de coder un objet qui serai constant mais qui
proposerai des iterator sur ses membres ?
avec le peu de connaissances que j'ai je dirais que non car objet
constant implique iterator membre constant implique iterator
inutilisable ... ??
la chose suivante est-elle possible ?
class C_Coup
{
private:
vector<string> tab;
public:
typedef vector<string>::iterator iter;
typdef vector<string>::const_iterator citer;
typedef vector<string>::iterator iter_fin;
typdef vector<string>::const_iterator citer_fin;
C_Coup();
int indice(const string s);
};
si oui, dans quelles conditions puis-je utiliser mes nouveaux types ?
1) dans le codage de mes méthodes ?
2) dans toute fonction utilisant un objet C_Coup ?
autre question, celle ci relève un peu plus de la technique de
programmation avec ces outils, est-ce que ce genre de classe est une
bonne méthode pour restreindre l'accès a un tableau en laissant
possible des manipulations dessus ?
j'ai la classe suivante :
class C_Coup
{
private:
vector<string> tab;
public:
vector<string>::iterator iter;
vector<string>::const_iterator citer;
vector<string>::iterator iter_fin;
vector<string>::const_iterator citer_fin;
C_Coup();
int indice(const string s);
};
j'ai pas envie que l'utilisateur touche a mon vector, donc je le mets
en private, je lui donne accès a des iterator pour qu'il puisse se
déplacer dans le vector.
j'ai sur ceci, quelques questions :
est-il possible de coder un objet qui serai constant mais qui
proposerai des iterator sur ses membres ?
avec le peu de connaissances que j'ai je dirais que non car objet
constant implique iterator membre constant implique iterator
inutilisable ... ??
la chose suivante est-elle possible ?
class C_Coup
{
private:
vector<string> tab;
public:
typedef vector<string>::iterator iter;
typdef vector<string>::const_iterator citer;
typedef vector<string>::iterator iter_fin;
typdef vector<string>::const_iterator citer_fin;
C_Coup();
int indice(const string s);
};
si oui, dans quelles conditions puis-je utiliser mes nouveaux types ?
1) dans le codage de mes méthodes ?
2) dans toute fonction utilisant un objet C_Coup ?
autre question, celle ci relève un peu plus de la technique de
programmation avec ces outils, est-ce que ce genre de classe est une
bonne méthode pour restreindre l'accès a un tableau en laissant
possible des manipulations dessus ?
Et pour qu'il puisse modifier ton vecteur. D'ailleurs, pourquoi des
variables publiques. Je verrais plutôt quelque chose du genre :
class Coup
{
public:
typedef std::vector< std::string >::const_iterator
iterator ;
iterator begin() const
{
return myTab.begin() ;
}
iterator end() const
{
return myTab.end() ;
}
private:
std::vector< std::string >
myTab ;
} ;
avec le peu de connaissances que j'ai je dirais que non car objet
constant implique iterator membre constant implique iterator
inutilisable ... ??
Pas du tout. L'important, c'est que l'itérateur n'est pas membre de la
collection. Donc, même si la collection est constante, l'itérateur ne
l'est pas forcement.
(En revanche, il doit être un const_iterator, c-à-d
grosso modo un itérateur dont l'opérateur * renvoie une référence const,
et non une simple référence, de façon à ce que l'utilisateur ne peut pas
modifier ta collection à travers l'itérateur.)
1) dans le codage de mes méthodes ?
Comme partout ailleurs, dans C_Coup, tu obtiens les itérateurs de tab.
Que tu peux rendre publique en les renvoyant d'une fonction, on non,
comme bon te semble.
Et pour qu'il puisse modifier ton vecteur. D'ailleurs, pourquoi des
variables publiques. Je verrais plutôt quelque chose du genre :
class Coup
{
public:
typedef std::vector< std::string >::const_iterator
iterator ;
iterator begin() const
{
return myTab.begin() ;
}
iterator end() const
{
return myTab.end() ;
}
private:
std::vector< std::string >
myTab ;
} ;
avec le peu de connaissances que j'ai je dirais que non car objet
constant implique iterator membre constant implique iterator
inutilisable ... ??
Pas du tout. L'important, c'est que l'itérateur n'est pas membre de la
collection. Donc, même si la collection est constante, l'itérateur ne
l'est pas forcement.
(En revanche, il doit être un const_iterator, c-à-d
grosso modo un itérateur dont l'opérateur * renvoie une référence const,
et non une simple référence, de façon à ce que l'utilisateur ne peut pas
modifier ta collection à travers l'itérateur.)
1) dans le codage de mes méthodes ?
Comme partout ailleurs, dans C_Coup, tu obtiens les itérateurs de tab.
Que tu peux rendre publique en les renvoyant d'une fonction, on non,
comme bon te semble.
Et pour qu'il puisse modifier ton vecteur. D'ailleurs, pourquoi des
variables publiques. Je verrais plutôt quelque chose du genre :
class Coup
{
public:
typedef std::vector< std::string >::const_iterator
iterator ;
iterator begin() const
{
return myTab.begin() ;
}
iterator end() const
{
return myTab.end() ;
}
private:
std::vector< std::string >
myTab ;
} ;
avec le peu de connaissances que j'ai je dirais que non car objet
constant implique iterator membre constant implique iterator
inutilisable ... ??
Pas du tout. L'important, c'est que l'itérateur n'est pas membre de la
collection. Donc, même si la collection est constante, l'itérateur ne
l'est pas forcement.
(En revanche, il doit être un const_iterator, c-à-d
grosso modo un itérateur dont l'opérateur * renvoie une référence const,
et non une simple référence, de façon à ce que l'utilisateur ne peut pas
modifier ta collection à travers l'itérateur.)
1) dans le codage de mes méthodes ?
Comme partout ailleurs, dans C_Coup, tu obtiens les itérateurs de tab.
Que tu peux rendre publique en les renvoyant d'une fonction, on non,
comme bon te semble.
1) dans le codage de mes méthodes ?
Comme partout ailleurs, dans C_Coup, tu obtiens les itérateurs de
tab. Que tu peux rendre publique en les renvoyant d'une fonction,
on non, comme bon te semble.
alors comment accéder a ce nouveau type ?
exemple :
//fichier A.h
class A
{
public :
typedef int entier;
A();
entier methode1();
}
//fichier A.cpp
A()
{
}
entier A::methode1() //erreur de compilation 'syntax error before ::'
1) dans le codage de mes méthodes ?
Comme partout ailleurs, dans C_Coup, tu obtiens les itérateurs de
tab. Que tu peux rendre publique en les renvoyant d'une fonction,
on non, comme bon te semble.
alors comment accéder a ce nouveau type ?
exemple :
//fichier A.h
class A
{
public :
typedef int entier;
A();
entier methode1();
}
//fichier A.cpp
A()
{
}
entier A::methode1() //erreur de compilation 'syntax error before ::'
1) dans le codage de mes méthodes ?
Comme partout ailleurs, dans C_Coup, tu obtiens les itérateurs de
tab. Que tu peux rendre publique en les renvoyant d'une fonction,
on non, comme bon te semble.
alors comment accéder a ce nouveau type ?
exemple :
//fichier A.h
class A
{
public :
typedef int entier;
A();
entier methode1();
}
//fichier A.cpp
A()
{
}
entier A::methode1() //erreur de compilation 'syntax error before ::'