爲什麼使用非常量迭代器爲該行編譯以下代碼,但是對於常量迭代器(使用Visual Studio 2008)失敗?爲什麼只能在一種情況下推導出模板參數?
#include <vector>
using std::vector;
int main(int argc, char* argv[])
{
vector<int> test;
test.push_back(1);
test.push_back(2);
vector<int>::const_iterator cit = test.end();
std::distance(test.begin(), cit); // error: template parameter is ambiguous
vector<int>::iterator it = test.end();
std::distance(test.begin(), it);
return 0;
}
注意:在Visual Studio 2008沒有向量成員函數cbegin()
避免含糊,但一個重載begin()
方法:
iterator begin()
{ // return iterator for beginning of mutable sequence
return (iterator(_Myfirst, this));
}
const_iterator begin() const
{ // return iterator for beginning of nonmutable sequence
return (const_iterator(_Myfirst, this));
}
作爲一個經驗法則,你會發現,你需要使用'iterator'而不是'爲const_iterator '在大多數情況下 - 請參閱[有效STL](http://www.amazon.com/Effective-STL-Specific-Standard-Template/dp/0201749629)#26以獲取完整說明。 – 2012-08-06 08:50:21