删除 C++ 后算法变慢 template/typename

Algorithm slower after having removed C++ template/typename

为了学习目的和理解事情是如何工作的,我试图在没有模板的情况下重写它,在这种情况下 wstring:

#include <ctype.h>

template<typename charT>
struct my_equal 
{
    bool operator()(charT ch1, charT ch2) { return toupper(ch1) == ch2; }
};

template<typename T>
bool contains(const T& str1, const T& str2)
{
    typename T::const_iterator it = std::search(str1.begin(), str1.end(), str2.begin(), str2.end(), my_equal<typename T::value_type>());
    return (it != str1.end());    
}

我正在尝试这个:

struct my_equal 
{
    bool operator()(wchar_t ch1, wchar_t ch2) { return toupper(ch1) == ch2; }
};

bool contains(const wstring str1, const wstring str2)
{
    wstring::const_iterator it = std::search(str1.begin(), str1.end(), str2.begin(), str2.end(), my_equal());
    return (it != str1.end());
}

它可以工作,但在对其进行基准测试时速度要慢两倍或三倍。为什么?

"translation without templates"有什么问题吗?

此外,是否可以避免使用 struct 而直接在 search(...) 中进行 my_equal 比较?

您遗漏了一些符号。成功了,

bool contains(const wstring &str1, const wstring &str2)
{
    wstring::const_iterator it = std::search(str1.begin(), str1.end(), str2.begin(), str2.end(), my_equal());
    return (it != str1.end());
}