質問のように、私はその理由が不思議です。 const
と非const
イテレータの間の距離を取得しようとすると、エラーが発生するためです。constとnonconstイテレータの組み合わせでstd :: distanceが機能しないのはなぜですか?
vector<int> v;
auto it=v.begin();
auto cit=v.cbegin();
distance(it,cit);
no matching function for call to ‘distance(__gnu_cxx::__normal_iterator<int*, std::vector<int> >&, __gnu_cxx::__normal_iterator<const int*, std::vector<int> >&)
私のイテレータの理解が限られているので、私はそれがうまくいかない理由はありません。
なぜ2つのテンプレートパラメータでテンプレートを作成するだけでいいですか?それはcppコアランでそれを行うことは可能ですか?私は何を求めているのは、設計上の決定かラングの制限ですか? – NoSenseEtAl
は明らかですが、2つのテンプレートパラメータでテンプレートを作ることができますが、1つのテンプレートparamバージョン – NoSenseEtAl
@NoSenseEtAlと矛盾しているのでしょうか?この方法は簡単ですし、さまざまな種類のイテレータ間の距離を計算すること(たとえば、ランダムアクセス反復子と前方反復子)は、おそらく非常に頻繁にやりたいことではありません。実際には、2つのテンプレート引数を持つバージョンを書くことができますが、現実世界の問題はどのように解決されますか? –