सी ++ 17 के लिए आपको structured binding declaration का उपयोग करना चाहिए। वाक्यविन्यास जीसीसी -7 और क्लैंग-4.0 (clang live example) में समर्थित है। यह हमें तो जैसे एक टपल अनपैक करने के लिए अनुमति देता है:
for (auto [i, f] = std::tuple{1, 1.0}; i < N; ++i) { /* ... */ }
के लिए सी ++ 14 आप के प्रकार के आधार पर std::get
इसके साथ के रूप में सी ++ 11 (नीचे) भी ऐसा ही कर सकते हैं। तो नीचे दिए गए उदाहरण में std::get<0>(t)
की बजाय, आपके पास std::get<int>(t)
हो सकता है।
के लिए सी ++ 11 std::make_pair
आप दो से अधिक वस्तुओं के लिए यह है, साथ ही std::make_tuple
करने के लिए अनुमति देता है।
for (auto p = std::make_pair(5, std::string("Hello World")); p.first < 10; ++p.first) {
std::cout << p.second << std::endl;
}
std::make_pair
एक std::pair
में दो तर्क वापस आ जाएगी। तत्वों को .first
और .second
के साथ एक्सेस किया जा सकता है।
दो से अधिक वस्तुओं के लिए, आप का उपयोग करने के लिए एक std::tuple
for (auto t = std::make_tuple(0, std::string("Hello world"), std::vector<int>{});
std::get<0>(t) < 10;
++std::get<0>(t)) {
std::cout << std::get<1>(t) << std::endl; // cout Hello world
std::get<2>(t).push_back(std::get<0>(t)); // add counter value to the vector
}
std::make_tuple
कि बहस के किसी भी संख्या (बेशक कुछ तकनीकी सीमाओं के साथ) के एक टपल का निर्माण करेगी एक variadic टेम्पलेट है की आवश्यकता होगी। तत्वों पाश निकायों के लिए std::get<INDEX>(tuple_object)
के भीतर के साथ सूचकांक द्वारा पहुँचा जा सकता तो आप आसानी से वस्तुओं उर्फ, आप अभी भी लूप हालत के लिए के लिए .first
या std::get
का उपयोग करें और अभिव्यक्ति
for (auto t = std::make_tuple(0, std::string("Hello world"), std::vector<int>{});
std::get<0>(t) < 10;
++std::get<0>(t)) {
auto& i = std::get<0>(t);
auto& s = std::get<1>(t);
auto& v = std::get<2>(t);
std::cout << s << std::endl; // cout Hello world
v.push_back(i); // add counter value to the vector
}
अद्यतन करने की आवश्यकता है, हालांकि
सी ++ 98 और सी ++ 03 के लिए आप स्पष्ट रूप से std::pair
के प्रकारों का नाम दे सकते हैं। - 4.4 (`-std = C++ 0x`)` (ऑटो- मैं = 0 के रूप में
for (std::pair<int, std::string> p(5, "Hello World"); p.first < 10; ++p.first) {
std::cout << p.second << std::endl;
}
यह जी में ++ संभव है: हालांकि दो से अधिक प्रकार को यह सामान्यीकरण करने के लिए कोई मानक तरीका नहीं है , जे = 0.0; ... ', लेकिन यह संभावना जी ++ - 4.5 में सी ++ 0x ग्रंथों के साथ मेल खाने के लिए हटा दी गई थी। – rafak
संभावित डुप्लिकेट [क्या मैं लूप के प्रारंभ में विभिन्न प्रकार के चर घोषित कर सकता हूं?] (http://stackoverflow.com/questions/8644707/can-i-declare-variables-of- अलग-types-in-the-initialization-of-a-for-loop) –
वास्तव में अन्य प्रश्न को बंद किया जाना चाहिए इसका एक डुप्लिकेट, क्योंकि इसमें बेहतर उत्तर हैं। –