19
是否有可能在本例中用「純」C++ 11等效替換BOOST_FOREACH
?用「純」C++ 11替代替換BOOST_FOREACH?
#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);
無效。
我能找到的最接近的是:
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