#include <iostream>
#include <map>
int main(int argc, char** argv)
{
std::map<int, int> map;
map.emplace(1, 1);
auto reverse_iter = map.rbegin();
std::cout << reverse_iter->first << ", " << reverse_iter->second << std::endl;
map.emplace(2, 2);
std::cout << reverse_iter->first << ", " << reverse_iter->second << std::endl;
return 0;
}
यह बाहर प्रिंट:क्या यह उचित व्यवहार है? std :: नक्शा iterator अमान्यकरण
1, 1
2, 2
यह वास्तव में क्या होने चाहिए था है, मानक के अनुसार? मैं रिवर्स_आईटर को छू नहीं रहा हूं लेकिन जिस बिंदु पर यह इंगित कर रहा है वह बदल रहा है। मैंने सोचा था कि std :: मानचित्र में iterators सम्मिलन के खिलाफ सुरक्षित होना चाहिए था। फिर भी ऐसा लगता है कि रिवर्स_इटर उस मूल्य को इंगित करने के लिए नहीं है जिसे मैंने बताया था, "इस बिंदु पर मानचित्र के अंत में जो भी हो रहा है" के बजाय।
अद्यतन: आगे की जानकारी, यदि यह मायने रखती है: यह आगे इटरेटर्स (किसी भी स्थिति में मुझे लगता है) के साथ ऐसा प्रतीत नहीं होता है, और मेरा जीसीसी संस्करण 5.1.1-4 है।
"अवैध" होने के नाते और इशारा करते हुए के लिए नए डेटा एक ही बात नहीं हैं, वे कर रहे हैं? यह आपके कंटेनर में आखिरी जोड़ी के लिए एक वैध सूचक है। वह जोड़ी बस बदल गई है। – tadman
आगे इटरेटर्स के साथ नहीं होता है। शुरूआत के साथ rbegin बदलें और (2, 2) (0, 0) के साथ प्रतिस्थापित करें। और फिर, क्या मानकों का अनुपालन है? क्योंकि यह वास्तव में अप्रत्याशित रूप से खराब है, यह निश्चित रूप से है। – KarenRei
ठीक है, मानचित्र में डाली गई पहली चीज़ बदलेगी नहीं। हालांकि आखिरी चीज आपने किया था। – tadman