に間接参照値との比較は、もともと私はこれをしなかった方法でstd::vector<Point>
たメンバーを持っていましたstd::vector<Point*>
となり、もはや働いていた従来の方法と私はそれを変更しなければならなかった:良いのstd ::ポインタのコレクションで見つけ、const参照値
bool Spline::Intersects(const Point& point) const {
for(std::vector<Point*>::const_iterator _iter = _result_points.begin(); _iter != _result_points.end(); ++_iter) {
if(*(*_iter) == point) return true;
}
return false;
}
std::find
が同じ線形検索を実行していますか?もしそうなら、これを行うためのより速い/より良い/より少ない粗い方法があります(特にイテレータの二重参照解除)?
std::find(this->_result_points.begin(), _result_points.end(), point) != _result_points.end();
(またはそれに類するが、反対の結果)が実行されるコードには他の場所があり、その遅い線形ループを使用する必要はありません。
イテレータは2回参照解除する必要があります。これはC++の仕組みです。イテレータはポインタのように動作します。あなたのベクトルにはポイントポインタが含まれているので、イテレータはポインタへのポインタのように振る舞うので、2度間接参照する必要があります。 – Adrian
@Adrian:イテレータがポインタで実装されるかどうかは、実装定義です。 –
「イテレータのダブル・リファレンス解除」はありません。標準コンテナにポインタを格納していますが、これは愚かです。 –