संभव डुप्लिकेट:
Find position of element in C++11 range-based for loop?अजगर की तरह पाश गणन
मैं एक vector
है और मैं यह पुनरावृति और एक ही समय में, चाहते हैं, के लिए उपयोग किया प्रत्येक व्यक्तिगत तत्व के लिए अनुक्रमणिका (मुझे एक तत्व में तत्व और इसकी अनुक्रमणिका दोनों को पारित करने की आवश्यकता है)। मैंने निम्नलिखित दो समाधानों पर विचार किया है:
std::vector<int> v = { 10, 20, 30 };
// Solution 1
for (std::vector<int>::size_type idx = 0; idx < v.size(); ++idx)
foo(v[idx], idx);
// Solution 2
for (auto it = v.begin(); it != v.end(); ++it)
foo(*it, it - v.begin());
मैं सोच रहा था कि कोई और कॉम्पैक्ट समाधान हो सकता है या नहीं। पाइथन के enumerate के समान कुछ। यह सबसे नज़दीकी है कि मुझे सी ++ 11 रेंज-लूप का उपयोग करना पड़ा, लेकिन एक निजी दायरे में लूप के बाहर इंडेक्स को परिभाषित करना निश्चित रूप से 1 या 2:
{
int idx = 0;
for (auto& elem : v)
foo(elem, idx++);
}
से अधिक खराब समाधान की तरह प्रतीत होता है
क्या नवीनतम उदाहरण को सरल बनाने के लिए कोई तरीका है (शायद बूस्ट का उपयोग करके) इस तरह से सूचकांक लूप में स्वयं निहित हो जाता है?
सरल चीजों को सरल क्यों बनाएं? :-) – Kos
आपको जेनरेटर-जैसे फ़ंक्शन/ऑब्जेक्ट बनाना होगा जो std :: जोड़ी देता है और जोड़ी के पहले और दूसरे फ़ील्ड का उपयोग करता है। आप शायद चाल करने के लिए मैक्रोज़ का उपयोग कर सकते हैं, लेकिन सी ++ में पायथन-जैसी वाक्यविन्यास का उपयोग करने के लिए कोई आसान और सुरुचिपूर्ण तरीका नहीं है। आपका दूसरा समाधान शायद सबसे अच्छी बात है। – Morwenn
@ कोस मैं समाधान के साथ काफी ठीक हूं 2. अगर एक आसान तरीका भी है तो बस उत्सुक :) – betabandido