この例の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;
}
をしかし、遠隔ループアイデアをもとのどれも動作するように見えません。おそらくあったforループベースでもあるため、:
前に宣言を持つことが必要です。
std::vector<int> test;
int i;
for (i : test);
が有効ではありません。私は見つけることができます
最も近い同等です:BOOST_FOREACH
版ほど簡潔ではありません
for (auto it = map.begin(); it!=map.end() && (std::tie(k,v)=*it,1); ++it)
{
std::cout << "k=" << k << " - " << v << std::endl;
}
!
C++ 11では、同じことをブーストなしで簡潔に表現する方法はありますか?
と同じ出力を生成しますが、最初の例では反復ごとに文字列をコピーしませんか?本当にそれが欲しいですか? – pmr