Dlaczego nie mogę zrobić std :: map.begin () + 1?
mamstd::map
, które chcę powtórzyć, zaczynając od drugiego wpisu.
Mogę to obejść dobrze, ale jestem zdezorientowany, dlaczego składnia „oczywista” nie kompiluje. Komunikat o błędzie nie pomaga, ponieważ odnosi się dostd::string
, którego tutaj nie używam.
Oto kod
// suppose I have some map ...
std::map<int, int> pSomeMap;
// this is fine ...
std::map<int, int>::const_iterator pIterOne = pSomeMap.begin();
++pIterOne;
// this doesn't compile ...
std::map<int, int>::const_iterator pIterTwo = pSomeMap.begin() + 1;
VS2012 podaje następujący błąd w powyższej linii
error C2784: 'std::_String_iterator<_Mystr> std::operator +
(_String_iterator<_Mystr>::difference_type,std::_String_iterator<_Mystr>)' :
could not deduce template argument for 'std::_String_iterator<_Mystr>' from 'int'
Czy ktoś może wyjaśnić, co tu się dzieje?