OVH Cloud OVH Cloud

vector initialisation

26 réponses
Avatar
Nicolas Aunai
salut, encore moi avec mes vector..


j'aimerai comprendre maintenant comment se passe l'initialisation des
vector, exemple j'ai un vector de 3 vector de 6 entier, soit un tableau
a 3 lignes et 6 colones. J'aimerai initialiser les 3 lignes ainsi :

111100
011110
001111

pour celà je fais :

vector < vector<int> > a(3);
a[0]={1,1,1,1,0,0};
a[1]={0,1,1,1,1,0};
a[2]={0,0,1,1,1,1};


ça ne marche pas, j'en suis pas trop surpris.... qu'elle est la bonne
méthode ?


merci

--
Nico,
http://astrosurf.com/nicoastro
messenger : nicolas_aunai@hotmail.com

10 réponses

1 2 3
Avatar
Marc Boyer
wrote:
Vector se construit de plusieurs façons. C'est vrai que la syntaxe 'C'
ne marche pas (mais je crois qu'on y travaille), mais on peut s'y
approcher avec l'initialisation par paire d'itérateurs :

static int const initValues[] = { 1, 2, 3, 4 } ;
std::vector< int > const v( begin( initValues ), end( initValues ) ) ;


Ca marche ça ? On peut faire le "end( initValues )" et il reconnait
tout seul que c'est initValues+4 ?

Marc Boyer, de découverte en découverte
--
Lying for having sex or lying for making war? Trust US presidents :-(

Avatar
Gabriel Dos Reis
Marc Boyer writes:

| wrote:
| > Vector se construit de plusieurs façons. C'est vrai que la syntaxe 'C'
| > ne marche pas (mais je crois qu'on y travaille), mais on peut s'y
| > approcher avec l'initialisation par paire d'itérateurs :
| >
| > static int const initValues[] = { 1, 2, 3, 4 } ;
| > std::vector< int > const v( begin( initValues ), end( initValues ) ) ;
|
| Ca marche ça ? On peut faire le "end( initValues )" et il reconnait
| tout seul que c'est initValues+4 ?

Ces templates sont devenus classiques

template<typename T, int N>
inline const T* begin(const T (&array)[N])
{ return array; }

template<typename T, int N>
inline const T* end(const T (&array)[N])
{ return array + N; }

template<typename T, int N>
inline size_t size(const T (&)[N])
{ return N; }

-- Gaby
Avatar
James Kanze
Gabriel Dos Reis writes:

|> Marc Boyer writes:

|> | wrote:
|> | > Vector se construit de plusieurs façons. C'est vrai que la
|> | > syntaxe 'C' ne marche pas (mais je crois qu'on y travaille),
|> | > mais on peut s'y approcher avec l'initialisation par paire
|> | > d'itérateurs :

|> | > static int const initValues[] = { 1, 2, 3, 4 } ;
|> | > std::vector< int > const v( begin( initValues ), end( initValues ) ) ;

|> | Ca marche ça ? On peut faire le "end( initValues )" et il
|> | reconnait tout seul que c'est initValues+4 ?

|> Ces templates sont devenus classiques

|> template<typename T, int N>
|> inline const T* begin(const T (&array)[N])
|> { return array; }

|> template<typename T, int N>
|> inline const T* end(const T (&array)[N])
|> { return array + N; }

|> template<typename T, int N>
|> inline size_t size(const T (&)[N])
|> { return N; }

Tu es sans doute plus au courant que moi : est-ce qu'il y a une
proposition de les normaliser dans la prochaine version de la norme C++ ?

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
Gabriel Dos Reis
James Kanze writes:

| |> Ces templates sont devenus classiques
|
| |> template<typename T, int N>
| |> inline const T* begin(const T (&array)[N])
| |> { return array; }
|
| |> template<typename T, int N>
| |> inline const T* end(const T (&array)[N])
| |> { return array + N; }
|
| |> template<typename T, int N>
| |> inline size_t size(const T (&)[N])
| |> { return N; }
|
| Tu es sans doute plus au courant que moi : est-ce qu'il y a une
| proposition de les normaliser dans la prochaine version de la norme C++ ?

Pas à ma connaissance. Mais je vois très bien comment c'est relié aux
initialisateurs généralisés et au concept de « sequence<T> » dont
BS et moi discutions très récemment. Si tu en fais une
proposition, je crois que je pourrais la défendre (à moins que tu
viennes à Sydney :-)) ; je peux également l'inclure en annexe du
(prochain) papier « support pour la programmation générique » :
« generalized initializers » + « constant-valued functions » +
« user-defined literals » + « decltype/auto » (et pourquoi pas
« concepts »).

Hmm, je crois que BS a déjà mentionné « size() » dans son papier
sur les litéraux définis par l'utilisateur. Il faut probablement deux
versions pour begin() et end().


Tiens, au fait, pendant que tu es là -- et ceci aurait dû se faire par
mail, mais lis la suite --, quelle est exactement ton adresse qui ne
fait pas de bounce ? Parce que kanze at gabi-soft dot fr me revient
systématiquement en pleine figure ; en particulier, depuis quelques
temps, les copies des messages envoyés sur la liste du pôle
d'expertise AFNOR/C/C++ et qui te sont adressées sont rejetées. Ou
alors, tu ne veux plus faire partie de la liste ?

-- Gaby
Avatar
James Kanze
Gabriel Dos Reis writes:

|> James Kanze writes:

|> | |> Ces templates sont devenus classiques

|> | |> template<typename T, int N>
|> | |> inline const T* begin(const T (&array)[N])
|> | |> { return array; }

|> | |> template<typename T, int N>
|> | |> inline const T* end(const T (&array)[N])
|> | |> { return array + N; }

|> | |> template<typename T, int N>
|> | |> inline size_t size(const T (&)[N])
|> | |> { return N; }

|> | Tu es sans doute plus au courant que moi : est-ce qu'il y a une
|> | proposition de les normaliser dans la prochaine version de la
|> | norme C++ ?

|> Pas à ma connaissance. Mais je vois très bien comment c'est
|> relié aux initialisateurs généralisés et au concept de
|> « sequence<T> » dont BS et moi discutions très
|> récemment. Si tu en fais une proposition, je crois que je
|> pourrais la défendre (à moins que tu viennes à Sydney
|> :-)) ; je peux également l'inclure en annexe du (prochain) papier
|> « support pour la programmation générique » : «
|> generalized initializers » + « constant-valued functions »
|> + « user-defined literals » + « decltype/auto » (et
|> pourquoi pas « concepts »).

Sydney est hors question pour moi. Ça fait plusieurs années que je
me dis que j'assisterai à la prochaine réunion en Europe, mais
chaque fois, il y a quelque chose qui m'empêche.

En revanche, je crois que je pourrais trouver le temps de faire une
proposition.

|> Hmm, je crois que BS a déjà mentionné « size() » dans
|> son papier sur les litéraux définis par l'utilisateur. Il faut
|> probablement deux versions pour begin() et end().

C'est ce que j'ai trouvé par expérience. J'avoue ne pas comprendre
trop pourquoi : pourquoi est-ce que :

template< typename T, size_t N >
T*
begin( T (&array)[ N ] )
{
return array ;
}

ne marche pas avec :

int const init[] = { 1, 1, 2, 3, 5, 8 } ;

?

|> Tiens, au fait, pendant que tu es là -- et ceci aurait dû se
|> faire par mail, mais lis la suite --, quelle est exactement ton
|> adresse qui ne fait pas de bounce ?

Pour le moment, il n'y en a que l'adresse CAI qui marche. Que je ne
poserais pas ici, où les spammers peuvent le récupérer.
(L'adresse est chez un client, et j'ai assez de respect pour mes clients
pour ne pas vouloir surcharger leurs systèmes.) Je te l'enverrai par
email lundi.

|> Parce que kanze at gabi-soft dot fr me revient systématiquement
|> en pleine figure ; en particulier, depuis quelques temps, les copies
|> des messages envoyés sur la liste du pôle d'expertise
|> AFNOR/C/C++ et qui te sont adressées sont rejetées. Ou alors,
|> tu ne veux plus faire partie de la liste ?

J'en ferais bien partie si j'avais une adresse email qui marchait.

J'ai pas mal de problèmes personnels en ce moment. Alors, le C++
devient un peu moins important.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
Gabriel Dos Reis
James Kanze writes:

| |> Hmm, je crois que BS a déjà mentionné « size() » dans
| |> son papier sur les litéraux définis par l'utilisateur. Il faut
| |> probablement deux versions pour begin() et end().
|
| C'est ce que j'ai trouvé par expérience. J'avoue ne pas comprendre
| trop pourquoi : pourquoi est-ce que :
|
| template< typename T, size_t N >
| T*
| begin( T (&array)[ N ] )
| {
| return array ;
| }
|
| ne marche pas avec :
|
| int const init[] = { 1, 1, 2, 3, 5, 8 } ;
|
| ?

la fonction attend un tableau dont les éléments sont modifiables.

-- Gaby
Avatar
James Kanze
Gabriel Dos Reis writes:

|> James Kanze writes:

|> | |> Hmm, je crois que BS a déjà mentionné « size()
|> | |> » dans son papier sur les litéraux définis par
|> | |> l'utilisateur. Il faut probablement deux versions pour begin()
|> | |> et end().

|> | C'est ce que j'ai trouvé par expérience. J'avoue ne pas
|> | comprendre trop pourquoi : pourquoi est-ce que :

|> | template< typename T, size_t N >
|> | T*
|> | begin( T (&array)[ N ] )
|> | {
|> | return array ;
|> | }

|> | ne marche pas avec :

|> | int const init[] = { 1, 1, 2, 3, 5, 8 } ;

|> | ?

|> la fonction attend un tableau dont les éléments sont modifiables.

Pourquoi ? Elle ne fait aucune tentative de modifier les éléments.

Ce que je ne comprends pas, c'est que la deuxième fonction, elle, ne
fait que remplacer toutes les occurances de T avec T const (dans le
template). C-à-d que dans un cas, je resouds T en int, pour avoir les
int const partout, et dans l'autre, je le resouds T directement en int
const. Pourquoi est-ce que ce deuxième cas ne marche pas ?

J'imagine alors qu'il y a une histoire de suppression du const du plus
haut niveau quelque part, mais j'avoue ne pas être assez
spécialiste pour le trouver.

--
James Kanze mailto:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France +33 1 41 89 80 93
Avatar
Gabriel Dos Reis
James Kanze writes:

| |> Tiens, au fait, pendant que tu es là -- et ceci aurait dû se
| |> faire par mail, mais lis la suite --, quelle est exactement ton
| |> adresse qui ne fait pas de bounce ?
|
| Pour le moment, il n'y en a que l'adresse CAI qui marche. Que je ne
| poserais pas ici, où les spammers peuvent le récupérer.
| (L'adresse est chez un client, et j'ai assez de respect pour mes clients
| pour ne pas vouloir surcharger leurs systèmes.) Je te l'enverrai par
| email lundi.

OK.

J'avais écarté la possibilité que ton professionalisme t'amenerait
à publier une adresse professionelle inivalide.

| |> Parce que kanze at gabi-soft dot fr me revient systématiquement
| |> en pleine figure ; en particulier, depuis quelques temps, les copies
| |> des messages envoyés sur la liste du pôle d'expertise
| |> AFNOR/C/C++ et qui te sont adressées sont rejetées. Ou alors,
| |> tu ne veux plus faire partie de la liste ?
|
| J'en ferais bien partie si j'avais une adresse email qui marchait.
|
| J'ai pas mal de problèmes personnels en ce moment. Alors, le C++
| devient un peu moins important.

Je comprends très bien. Nous avons tous chacun notre liste de
priorité lié à nos problèmes et situations personnels.
Par exemple, te faire parvenir les copies des messages du pôle
d'expertise C/C++ n'est pas la priorité la plus importante.
Et comme je suis ennuyés par les bounces, j'ai d'abord voulu vérifier
avant d'enlever l'adresse fautive.

-- Gaby
Avatar
kanze
Gabriel Dos Reis wrote in message
news:...
James Kanze writes:

| |> Tiens, au fait, pendant que tu es là -- et ceci aurait dû se
| |> faire par mail, mais lis la suite --, quelle est exactement ton
| |> adresse qui ne fait pas de bounce ?

| Pour le moment, il n'y en a que l'adresse CAI qui marche. Que je ne
| poserais pas ici, où les spammers peuvent le récupérer. (L'adresse
| est chez un client, et j'ai assez de respect pour mes clients pour
| ne pas vouloir surcharger leurs systèmes.) Je te l'enverrai par
| email lundi.

OK.

J'avais écarté la possibilité que ton professionalisme t'amenerait à
publier une adresse professionelle inivalide.


C'était valide quand je l'ai difusé. Depuis, la quantité de spam que
j'ai reçu à mis la machine en botte.

| |> Parce que kanze at gabi-soft dot fr me revient systématiquement
| |> en pleine figure ; en particulier, depuis quelques temps, les
| |> copies des messages envoyés sur la liste du pôle d'expertise
| |> AFNOR/C/C++ et qui te sont adressées sont rejetées. Ou alors, tu
| |> ne veux plus faire partie de la liste ?

| J'en ferais bien partie si j'avais une adresse email qui marchait.

| J'ai pas mal de problèmes personnels en ce moment. Alors, le C++
| devient un peu moins important.

Je comprends très bien. Nous avons tous chacun notre liste de priorité
lié à nos problèmes et situations personnels. Par exemple, te faire
parvenir les copies des messages du pôle d'expertise C/C++ n'est pas
la priorité la plus importante.


C'est certainement moins important que la réussite scolaire de mes
enfants, par exemple.

Au moins dans mon cas, il y a d'autres choses dans la vie que le C++.

--
James Kanze GABI Software mailto:
Conseils en informatique orientée objet/ http://www.gabi-soft.fr
Beratung in objektorientierter Datenverarbeitung
11 rue de Rambouillet, 78460 Chevreuse, France, +33 (0)1 30 23 45 16

Avatar
Marc Boyer
Gabriel Dos Reis wrote:
Marc Boyer writes:
Ces templates sont devenus classiques

template<typename T, int N>
inline const T* begin(const T (&array)[N])
{ return array; }

template<typename T, int N>
inline const T* end(const T (&array)[N])
{ return array + N; }


J'avais raté que la résolution de template savait
prendre en compte la taille d'un tableau.
Je vais de surprise en surprise.
Sinon, merci pour la ref du "Ruminations". J'ai beaucoup
aimé le passage sur les itérateurs (et la subtilité des
iterateurs en sens inverse). Le passage sur les objets
fonctions qu'on peut composer aussi m'a un peu décoiffé
aussi.

Marc Boyer
--
Lying for having sex or lying for making war? Trust US presidents :-(

1 2 3