我在哪里可以找到std :: string :: find()的完整实现?

时间:2014-03-13 09:32:22

标签: c++ string std

我想找出为什么到目前为止我写的字符串搜索算法的每一个实现都比std::string提供的更糟糕。

它不仅更好,而且它似乎在恒定时间内执行(通过常量我的意思是它根据字符串和/或子字符串的大小变化很小),无论我是否在线程之间分配负载。

这是我的编译器:

g++ (Ubuntu 4.8.1-2ubuntu1~12.04) 4.8.1
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

到目前为止,我已经成功挖掘了位于basic_string.tcc的{​​{1}},这为/usr/include/c++/4.8.1/bits产生了这一点:

std::string::find

目前我唯一缺少的就是这一行:

template<typename _CharT, typename _Traits, typename _Alloc>
    typename basic_string<_CharT, _Traits, _Alloc>::size_type
    basic_string<_CharT, _Traits, _Alloc>::
    find(_CharT __c, size_type __pos) const _GLIBCXX_NOEXCEPT
    {
        size_type __ret = npos;
        const size_type __size = this->size();
            if (__pos < __size)
            {
                const _CharT* __data = _M_data();
                const size_type __n = __size - __pos;
                const _CharT* __p = traits_type::find(__data + __pos, __n, __c);
                if (__p)
                __ret = __p - __data;
            }
        return __ret;
    }

那么有没有人知道我在哪里可以找到const _CharT* __p = traits_type::find(__data + __pos, __n, __c); 的实现?

1 个答案:

答案 0 :(得分:3)

我找到了:

char / wchar_t只调用C(内置)函数,现在我注意到它们可以使用相同的char16_t / char32_t来优化其中一个专门化为wchar_t,在大多数平台上应与这两种类型中的一种相同。