2 questions a propos des vecteurs & de leurs initialisations
Le
mderie
Bonjour !
Q1) Je voudrais savoir si on peut demander au compilateur d'inferer le
type d'un element d'un vecteur :
template<class T>
class DumpVisitor
{
public:
void operator()(T item)
{
cout << "Item = " << item << endl;
}
};
vector<int> v;
for_each(v.begin(), v.end(), DumpVisitor<int>); // OK
for_each(v.begin(), v.end(), DumpVisitor<v.?>); // ?
Le but : definir une macro qui ne prend qu'un parametre, le vector !
Q2) Est-ce qu'avec le TR1 on peut ecrire plus simplement ceci :
vector<int> v;
v.push_back(1900);
v.push_back(1984);
v.push_back(2000);
v.push_back(2007);
v.push_back(2008);
Genre : vector<int> v = { 1900, 1984, 2000, 2007, 2008 };
Un tout grand merci.
Q1) Je voudrais savoir si on peut demander au compilateur d'inferer le
type d'un element d'un vecteur :
template<class T>
class DumpVisitor
{
public:
void operator()(T item)
{
cout << "Item = " << item << endl;
}
};
vector<int> v;
for_each(v.begin(), v.end(), DumpVisitor<int>); // OK
for_each(v.begin(), v.end(), DumpVisitor<v.?>); // ?
Le but : definir une macro qui ne prend qu'un parametre, le vector !
Q2) Est-ce qu'avec le TR1 on peut ecrire plus simplement ceci :
vector<int> v;
v.push_back(1900);
v.push_back(1984);
v.push_back(2000);
v.push_back(2007);
v.push_back(2008);
Genre : vector<int> v = { 1900, 1984, 2000, 2007, 2008 };
Un tout grand merci.

Poser une question

Le define vector<>::value_type to donne le type des données que
contients le vecteur.
Non mais tu peux le faire avec boost::array (std::tr1::array
boost::array<int,5> v_init = { { 1900,1984, 2000, 2007,2008 } };
vector
Sinon, il n'est pas trop du de se faire une fonction make_vector<>() qui
prends un tableau en entrée et retourne le vector<> correspondant puis
tu swap.
Michael
Oui mais bon cela m'oblige a ecrire qqch de ridicule :
for_each(v.begin(), v.end(), DumpVisitor<vector<int>::value_type>());
Or v a ete entierement defini...
==> Ma conclusion est donc que non le compilo ne peut pas m'aider:-(
Non merci : Je dois encore compter moi-meme le nombre d'element du
tableau(ici 5)...
Merci bcp quand meme
Sans le TR1, ni Boost, juste avec 2 fonctions triviales (cf plus bas),
il n'y a pas besoin de compter les elements:
int v_init[] = { 1900, 1984, 2000, 2007, 2008 };
vector< int > v( begin(v_init), end(v_init) ) ;
Les deux fonctions begin et end :
template< typename T, size_t N >
inline T* begin( T (&array)[ N ] )
{ return array ; }
template< typename T, size_t N >
inline T* end( T (&array)[ N ] )
{ return array + N ; }
Ce genre de chose est faite pour boost::assign.
Exemple.
vector<int> v m= 1900, 1984, 2000, 2007, 2008;
Il n'y a quelque chose là qui ne va pas. C'est quoi comme
syntax ? Au moins qu'il y ait un macro que je ne vois pas, un
compilateur doit émettre une erreur sur cette ligne. « v m »,
je ne crois pas que sans macro, ça peut jamais être légal. (Je
crois qu'il y a quelque chose dans boost qui permet :
v += 1900, 1984, 2000, 2007, 2008 ;
mais ça marche parce que l'opérateur += est surchargé, et qu'il
renvoie quelque chose pour lequel l'opérateur , est surchargé.
L'obfuscation, quoi. Mais dans ton cas, il n'y a pas
d'opérateurs à surcharger.)
--
James Kanze (GABI Software) email:
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34