2013-05-17 2 views
13

मैं ऐसे कोड है (सदिश में रहते हैं: 0 1 2 4)। .base() क्या करता है?C++ STL क्या आधार है()

+0

शायद आपको इसे पढ़ना चाहिए: http://www.cplusplus.com/reference/iterator/reverse_iterator/base/ – JBL

उत्तर

22

base() आगे इसी इटरेटर में एक रिवर्स इटरेटर बदल देता है। हालांकि, इसकी सादगी के बावजूद, यह पत्राचार एक चीज के रूप में छोटा नहीं है।

जब एक तत्व पर एक रिवर्स इटरेटर अंक, यह पिछले एक dereferences, तो तत्व यह शारीरिक रूप से को अंक और तत्व यह तार्किक अंक के लिए अलग हैं। निम्न आरेख में, i एक आगे इटरेटर है, और ri एक रिवर्स इटरेटर i से निर्मित है:

       i, *i 
          | 
    -  0  1  2  3  4  - 
         |  | 
         *ri ri 

तो अगर ri तार्किक तत्व 2 को इंगित करता है, यह शारीरिक रूप से तत्व 3 को इंगित करता है। इसलिए, जब एक आगे इटरेटर में परिवर्तित किया जाता है, परिणामी इटरेटर तत्व 3 पर इंगित करेगा, जो आपके उदाहरण में हटा दिया जाता है।

#include <iostream> 
#include <vector> 
#include <iterator> 
#include <algorithm> 

int main(int argc, char *argv[]) 
{ 
    std::vector<int> v { 0, 1, 2, 3, 4 }; 
    auto i = find(begin(v), end(v), 2); 

    std::cout << *i << std::endl; // PRINTS 2 

    std::reverse_iterator<decltype(i)> ri(i); 
    std::cout << *ri << std::endl; // PRINTS 1 
} 

यहाँ एक live example है:

निम्नलिखित छोटे प्रोग्राम ऊपर व्यवहार को दर्शाता है।

8

base() अंतर्निहित आधार पुनरावर्तक देता है।

आधार इटरेटर तत्व यह है कि तत्व reverse_iterator वर्तमान की ओर इशारा करते है के बगल में है को दर्शाता है। वह std::reverse_iterator(it).base() == std::next(it) है।

आप reverse_iteratorhere के बारे में अधिक जान सकते हैं।

enter image description here

संबंधित मुद्दे