(Sto avendo questi due typedef:iteratori STL std :: distanza) Errore
typedef std::vector<int> Container;
typedef std::vector<int>::const_iterator Iter;
Nel problema che considero, io eseguire alcune operazioni su Container Input
, e dopo che mi piacerebbe calcolare std::distance(Input.begin(),itTarget)
, dove itTarget
è del tipo Iter
. Ma sto ricevendo questo errore del compilatore da no instance of function template "std::distance" matches the argument list
e solo dopo il casting, ovvero, std::distance(static_cast<Iter>(Input.begin()),itTarget)
, tutto funziona correttamente.
Mi chiedo perché?
È perché 'begin()' non restituisce un 'const_iterator'? –
Ma in qualche modo dovrebbe essere in grado? http://www.cplusplus.com/reference/vector/vector/begin/ –
Questo è il modo in cui funzionano gli overload 'const' e non-'const'. Solo se 'Input' è' const'-qualificato verrà chiamato il overload 'const'. Inoltre, piuttosto che lanciare l'iteratore, è possibile chiamare specificare il tipo di modello: 'std :: distance (Input.begin(), itTarget)' –