次のコードは、非 const イテレータを使用して行をコンパイルするのに、 const イテレータ(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));
}