Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

2 questions a propos des vecteurs & de leurs initialisations

12 réponses
Avatar
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.

2 réponses

1 2
Avatar
mderie
Un tout grand merci a tous, j'ai trouve mon bonheur en melangeant
vos propositions. Quant a la surcharge de l'operateur "," c'est
amusant
mais fort deroutant... Le C++ a plus d'un tour dans son sac :)

A+
Avatar
David Côme
On Wed, 05 Mar 2008 10:36:41 +0100, Falk Tannhäuser
wrote:

James Kanze wrote:
On 4 mar, 18:43, David Côme wrote:
Sinon voici une exemple complet et minimaliste de boost::assign.

#include <boost/assign/std/vector.hpp> // for 'operator+=()'

using namespace std;
using namespace boost::assign;

int main()
{
vector<int> values ;
values += 1900,1984,2000,2007,2008;
}


Ce qui est déroutant, pour le moindre. J'aurais tendance à le
considérer même de l'obfusation et l'abus du surcharge de
l'opérateur. (Mais est-ce qu'il y a jamais des cas de surcharge
de l'opérateur virgule qui ne sont pas d'abus ?)


Surtout ça donne des résultats "intéressants" dès que les expressions
ayant des effets de bord entrent en jeu :

int i = 0;
values += ++i, ++i, ++i, i--, i--, i--;
std::copy(values.begin(), values.end(),
std::ostream_iterator<int>(std::cout, " "));

m'affiche "1 2 3 3 2 1 " avec GCC et "0 0 0 -2 -1 0 " avec MSVC, et les
deux ont raison...

Falk


Ah, vous avez toujours des codes tordus sous la main.
C'est pas possible ...



1 2