J'ai beaucoup d'exemples du code ci-dessous:Comment puis-je remplir un vecteur avec des itérateurs d'un type différent?
struct foo1
{
foo1(int ii = 0, int jj = 0)
{
this->ii = ii;
this->jj = jj;
}
int ii;
int jj;
};
struct foo2
{
foo2()
{
}
foo2(const foo1& f)
{
this->f = f;
}
foo1 f;
};
typedef std::vector<foo2> foo_v;
typedef std::set<int> bar_s;
bar_s barSet;
barSet.insert(1); barSet.insert(2); barSet.insert(3);
barSet.insert(4); barSet.insert(5); barSet.insert(6);
...
foo_v fooVec;
for (bar_s::iterator b = barSet.begin(); b != barSet.end(); ++b)
fooVec.push_back(foo2(*b));
Comment puis-je améliorer le code où il est le remplissage d'un nouveau vecteur de foo2?
Je pensais quelque chose le long des lignes de:
std::remove_copy_if(barSet.begin(), barSet.end(),
std::back_inserter(fooVec), ...)
mais je me bats pour trouver un moyen de lier le type int
à de nouvelles instances de la struct foo2
.
Note:
std::copy(barSet.begin(), barSet.end(), std::back_inserter(fooVec));
me donne l'erreur suivante:
Erreur 1 erreur C2679: binaire '=': aucun opérateur trouvé qui prend un opérande à droite de type ' int '(ou il n'y a pas de conversion acceptable)
Si vous déréférencer un itérateur sur 'bar_s', cela entraînerait un' int'. Maintenant, 'int' peut déjà être converti en' foo', vous devriez donc être capable d'insérer la valeur derrière un itérateur sur 'bar_s' dans' foo_v' – Mephane