Esiste un equivalente al enumerate
ciclo gamma a base di pitone in C++? Immagino qualcosa del genere.Esiste un equivalente al ciclo `enumerate` basato su intervallo da python nel moderno C++?
enumerateLoop (auto counter, auto el, container) {
charges.at(counter) = el[0];
aa.at(counter) = el[1];
}
Questo può essere fatto con modelli o macro?
Sono consapevole che posso solo usare una vecchia scuola per-loop e iterare fino a raggiungere container.size()
. Ma sono interessato a come questo potrebbe essere risolto usando modelli o macro.
EDIT
ho giocato un po 'con iteratori spinta dopo il suggerimento nei commenti. Ho un'altra soluzione funzionante con C++ 14.
template <typename... T>
auto zip(const T &... containers) -> boost::iterator_range<boost::zip_iterator<
decltype(boost::make_tuple(std::begin(containers)...))>> {
auto zip_begin =
boost::make_zip_iterator(boost::make_tuple(std::begin(containers)...));
auto zip_end =
boost::make_zip_iterator(boost::make_tuple(std::end(containers)...));
return boost::make_iterator_range(zip_begin, zip_end);
}
template <typename T>
auto enumerate(const T &container) {
return zip(boost::counting_range(0, static_cast<int>(container.size())),
container);
}
https://gist.github.com/kain88-de/fef962dc1c15437457a8
che cosa è esattamente sbagliato con la "vecchia scuola" per il ciclo che si desidera utilizzare i modelli o brividi * * macro, invece? – Borgleader
Niente di veramente. Sono solo curioso di vedere come potrebbe essere fatto. –