Можно ли заменить BOOST_FOREACH
в этом примере «чистым» эквивалентом C++ 11?Замените BOOST_FOREACH на «чистую» альтернативу 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;
}
}
Ключевой особенностью является сохранение пары ключ/значение в ссылках на k
и v
.
Я пробовал:
for(std::tie(k,v) : map)
{
std::cout << "k=" << k << " - " << v << std::endl;
}
и
auto i = std::tie(k,v);
for(i : map)
{
std::cout << "k=" << k << " - " << v << std::endl;
}
Но ни один из колебались на основе идей цикла, похоже, не работает. Предположительно, варьировались на основе цикла должно иметь декларацию до :
, так как даже:
std::vector<int> test;
int i;
for (i : test);
не действителен.
Ближайшим эквивалентом я могу найти:
for (auto it = map.begin(); it!=map.end() && (std::tie(k,v)=*it,1); ++it)
{
std::cout << "k=" << k << " - " << v << std::endl;
}
, который не является столь же лаконичен, как версия BOOST_FOREACH
!
Есть ли способ выразить одно и то же кратко без повышения в C++ 11?
Вы не копируете строку на каждой итерации в первом примере? Вы действительно этого хотите? – pmr