/** * @file dl_range_find.h * @brief 查找 * * * @version 1.0 * @author lveyou * @date 23-06-22 * * @note */ #pragma once #include "base/dl_vector2.h" //! 查找算法 namespace dl::Find { /** * @brief find,返回下标 * @note 失败返回-1 */ template size_t FirstIndex(const T& container, const V& v) { for (size_t i = 0; i < container.size(); ++i) { if (container[i] == v) { return i; } } return -1; } /** * @brief find,返回下标 * @note 失败返回 -1, -1 */ //template //SizeT FirstIndex(const Vector2& container, const V& v) //{ // for (size_t j = 0; j < container.GetHeight(); ++j) // { // for (size_t i = 0; i < container.GetWidth(); ++i) // { // if (container.Get(j, i) == v) // { // return { i, j }; // } // } // } // return { -1_zu, -1_zu }; //} /** * @brief find,返回指针 * @note 失败返回nullptr */ template auto FirstYes(C& container, F func) { for (auto& iter : container) { if (func(iter)) { return &iter; } } using V = std::decay_t; using T = typename V::value_type; return (T*)nullptr; } }