Mam takie dwie typedefs:STL Iteratory std :: odległości() Błąd
typedef std::vector<int> Container;
typedef std::vector<int>::const_iterator Iter;
w problem, że uważam, że wykonanie pewnych czynności na Container Input
, a potem chciałbym obliczyć std::distance(Input.begin(),itTarget)
, gdzie itTarget
jest typu Iter
. Ale otrzymuję ten błąd kompilatora, że no instance of function template "std::distance" matches the argument list
, i tylko po casting, tj. std::distance(static_cast<Iter>(Input.begin()),itTarget)
wszystko działa dobrze.
Zastanawiam się, dlaczego tak jest?
Czy to dlatego, że 'begin()' nie zwraca 'const_iterator'? –
Ale jakoś to powinno być możliwe? http://www.cplusplus.com/reference/vector/vector/begin/ –
W ten sposób działają przeciążenia 'const' i non' 'constst'. Tylko jeśli 'Input' ma wartość' const', zostanie wywołane przeciążenie 'const'. Ponadto, zamiast rzucać iterator, możesz wywołać typ szablonu: 'std :: distance (Input.begin(), itTarget)' –