BOOST_FOREACH
'un bu örnekte "saf" C++ 11 eşdeğeriyle değiştirilmesi mümkün mü?BOOST_FOREACH "pure" C++ 11 alternatifi ile değiştirilsin mi?
#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
ve v
referanslar anahtar/değer çifti tutulması olan önemli bir özelliği.
for(std::tie(k,v) : map)
{
std::cout << "k=" << k << " - " << v << std::endl;
}
ve
auto i = std::tie(k,v);
for(i : map)
{
std::cout << "k=" << k << " - " << v << std::endl;
}
Ama değişmekteydi döngü fikirler için esaslı görünüyordu hiçbiri işe:
denedim. Tahminen döngü temelinde çok beri
:
önce bir deklarasyon olması gerekir değişmekteydi:
std::vector<int> test;
int i;
for (i : test);
geçerli değil. Bulabileceğim
yakın eşdeğerdir: BOOST_FOREACH
sürümü olarak oldukça özlü değildir
for (auto it = map.begin(); it!=map.end() && (std::tie(k,v)=*it,1); ++it)
{
std::cout << "k=" << k << " - " << v << std::endl;
}
!
C++ 11'de aynı şeyi hızlı bir şekilde ifade etmenin bir yolu var mı?
ilk örnekte her değişiklikte bir dize kopyalama muyuz makro Boost ile aynı çıktıyı üretir? Onu cidden istiyor musun? – pmr