क्या इस उदाहरण में BOOST_FOREACH
को "शुद्ध" सी ++ 11 समकक्ष के साथ प्रतिस्थापित करना संभव है?BOOST_FOREACH को "शुद्ध" सी ++ 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
संस्करण के रूप में संक्षिप्त नहीं है!
क्या सी ++ 11 में बिना किसी बढ़ावा के एक ही चीज़ को संक्षेप में व्यक्त करने का कोई तरीका है?
आप पहले उदाहरण में हर यात्रा पर एक स्ट्रिंग नकल नहीं कर रहे रूप में एक ही उत्पादन उत्पादन होता है? क्या आप वास्तव में चाहते हैं कि? – pmr