我有這樣的兩個類型定義:STL迭代器的std ::距離()錯誤
typedef std::vector<int> Container;
typedef std::vector<int>::const_iterator Iter;
在我所考慮的問題,我在Container Input
執行某些操作,在那之後,我想計算std::distance(Input.begin(),itTarget)
,其中itTarget
是Iter
類型。但是我得到這個編譯器錯誤no instance of function template "std::distance" matches the argument list
,只有投射後,即std::distance(static_cast<Iter>(Input.begin()),itTarget)
一切工作正常。
我想知道爲什麼?
是因爲'begin()'沒有返回一個'const_iterator'? –
但不知何故它應該能夠? http://www.cplusplus.com/reference/vector/vector/begin/ –
這就是'const'和non-'const'重載的工作方式。只有'Input'是'const'-qualified將會調用'const'超載。此外,而不是鑄造迭代器,你可以調用指定模板類型:'std :: distance(Input.begin(),itTarget)' –