删除模板/类型名后算法变慢C++

Algorithm slower after having removed C++ template/typename

本文关键字:算法 C++ 类型 删除      更新时间:2023-10-16

出于学习目的并了解事情是如何工作的,我正在尝试在没有模板的情况下重写它,在这种情况下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());
}

它可以工作,但在基准测试时会慢两到三倍。为什么?

"没有模板的翻译"有问题吗?

另外,是否可以避免使用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());
}