È possibile sostituire lo BOOST_FOREACH
in questo esempio con un equivalente "puro" C++ 11?Sostituire BOOST_FOREACH con alternativa "pura" C++ 11?
#include <map>
#include <functional>
#include <boost/foreach.hpp>
#include <iostream>
int main() {
std::map<int, std::string> map = {std::make_pair(1,"one"), std::make_pair(2,"two")};
int k;
std::string v;
BOOST_FOREACH(std::tie(k, v), map) {
std::cout << "k=" << k << " - " << v << std::endl;
}
}
La caratteristica chiave è mantenere la coppia chiave/valore nei riferimenti per k
e v
.
ho provato:
for(std::tie(k,v) : map)
{
std::cout << "k=" << k << " - " << v << std::endl;
}
e
auto i = std::tie(k,v);
for(i : map)
{
std::cout << "k=" << k << " - " << v << std::endl;
}
Ma nessuno dei spaziato base per le idee di loop sembrava funzionare. Presumibilmente il variava in base per il ciclo deve avere una dichiarazione prima della :
, dal momento che anche:
std::vector<int> test;
int i;
for (i : test);
non è valido.
L'equivalente più che posso trovare è:
for (auto it = map.begin(); it!=map.end() && (std::tie(k,v)=*it,1); ++it)
{
std::cout << "k=" << k << " - " << v << std::endl;
}
, che non è così succinta come la versione BOOST_FOREACH
!
C'è un modo per esprimere la stessa cosa in modo succinto senza aumentare in C++ 11?
Non sei la copia di una stringa ad ogni iterazione nel primo esempio? Lo vuoi davvero? – pmr