Ich habe eine Funktion, die zwei ganzzahlige Vektoren dauert. Der erste Vektor wird als Referenz übergeben, der zweite als Verweis auf eine Konstante. Ich möchte beide Vektoren gleichzeitig durchlaufen und den ersten Vektor aktualisieren. So etwas wie die folgende Liste:Iterieren gleichzeitig über ref/cref Bereiche
#include <iostream>
#include <vector>
#include <boost/foreach.hpp>
#include <boost/range/combine.hpp>
void foo(std::vector<int>& a, std::vector<int> const& b)
{
boost::tuple<int&, int const&> x;
BOOST_FOREACH(x, boost::combine(a,b)) {
int& v1 = x.get<0>();
int const& v2 = x.get<1>();
v1 = v1 + v2 + 5;
}
}
int main(int argc, char **argv)
{
std::vector<int> a(3,10);
std::vector<int> b(3,10);
foo(a,b);
for (int v : a) {
std::cout << v << std::endl;
}
return 0;
}
Das Problem, das ich in laufen lasse sich auf zwei Bereiche laufen, wo man ref ist und das andere ist ref konst. Wie funktioniert das richtig mit boost: combine/for loop? Vielen Dank.
Warum Sie Ihre Frage tagge C++ 11 und Verwenden Sie das Boost-Tupel und foreach? – Chiel
Und warum überliefern Sie die zweite als eine konstante Referenz? – Chiel
Und drittens, können Sie einen Code setzen, den wir tatsächlich kompilieren und ausführen können? Oder im schlimmsten Fall, dass wir bearbeiten können, damit es kompilieren kann? – Chiel