Первоначально у меня был член, который был std::vector<Point>
с методом, который сделал это:
bool Spline::Intersects(const Point& point) const {
return std::find(this->_result_points.begin(), _result_points.end(), point) != _result_points.end();
}
Дизайн изменился и std::vector<Point>
стал std::vector<Point*>
, и предыдущий метод больше не работал, и мне пришлось изменить его на:
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();
(или аналогичные, но противоположные результаты), и я бы не стал использовать этот медленный линейный цикл for.