所以我一直在尝试创建一个函数,该函数将接收向量对象作为 C++ 中的通用类型。我有咖啡、小吃和果汁三个班级。我有一个二分搜索功能,可以在由这些类创建的三个向量对象中的每一个中搜索特定项目。但是为了进行二分搜索,我必须定义三个二分搜索函数。例如,binarySearchCoffee(vector coffeeList)、binarySearchSnack(vector coffeeList) 和 Juice 也是如此。那么,有没有办法创建一个通用的向量类型参数,它将接受我插入的任何内容或定义三个普通函数?但我不这么认为,因为它违反了 DRY 规则。感谢您的时间。
这就是模板的用途。事实上,这就是矢量本身的工作原理!!
template <typename ElementType>
bool DoMyBinarySearch(const std::vector<ElementType>& container, const ElementType& value)
{
auto it = std::lower_bound(std::begin(container), std::end(container), value);
return it != std::end(container) && *it == value;
}
Run Code Online (Sandbox Code Playgroud)
您甚至可以考虑将容器类型设为模板参数,这样您就不会被限制为向量(尽管在这种情况下这可能没有用)。
此示例也不考虑替代分配器或替代比较器,这对您来说可能重要也可能无关紧要。cppreference.com 的std::lower_bound
文章有一个更强大的例子。
不要忘记记录container
必须排序的先决条件。