Does std::map::iterator return a copy of value or a value itself?

前端 未结 4 587
生来不讨喜
生来不讨喜 2021-02-03 23:25

I\'m trying to create a map inside a map:

typedef map inner_map;
typedef map outer_map;

Will I be ab

4条回答
  •  慢半拍i
    慢半拍i (楼主)
    2021-02-03 23:54

    The value_type a map is a pair and therefore it has members first and second. As with all iterators, a map iterator is a pseudo-pointer, i.e. it points to data within a collection and not copies of that data.

    It is almost certain internally to contain pointers rather than references due to the fact that iterators can be re-assigned (that is what you use them for) and you cannot reassign references to refer to other objects.

    Even if you have a const_iterator and the type underneath is POD, it must have a pointer to it, in case someone does this:

    map< int, int > m;
    m.insert( make_pair( 1, 2 );
    map::const_iterator citer = m.begin();
    map::iterator iter = m.begin();
    iter->second = 3;
    std::cout << citer->second << '\n'; // should always print 3
    

    The behaviour should be defined and should output 3, which would not happen if the const_iterator decided to "optimise" after all it's const and only int...

提交回复
热议问题