掠过之前不重要的东西,直接上代码了
static void assign(char_type& __c1, const char_type& __c2) { __c1 = __c2; }
static bool eq(const _CharT& __c1, const _CharT& __c2)
{ return __c1 == __c2; }
static bool lt(const _CharT& __c1, const _CharT& __c2)
{ return __c1 < __c2; }
这 三个函数很简单
第一个是字符赋值
第二个比较是否相等
第三个比较是否小于
我们继续往下看
static int compare(const _CharT* __s1, const _CharT* __s2, size_t __n) {
for (size_t __i = 0; __i < __n; ++__i)
if (!eq(__s1[__i], __s2[__i]))
return __s1[__i] < __s2[__i] ? -1 : 1;
return 0;
}
这就是比较字符串是否相等的函数,相等返回0,大于返回1,小于返回-1
怎么样是不是很简单,自己都可以写出来
再看一下length函数
static size_t length(const _CharT* __s) {
const _CharT __nullchar = _CharT();
size_t __i;
for (__i = 0; !eq(__s[__i], __nullchar); ++__i)
{}
return __i;
}
这里注意了,返回长度的时候并不是你字符串长度为多少就给你返回多少,比如
char a[5]="abcdefgh";
当你调用length函数的时候是从a[0]的位置开始一直找到‘\0’才结束
所以length(a)=8而并不是我们想象中的5
static const _CharT* find(const _CharT* __s, size_t __n, const _CharT& __c)
{
for ( ; __n > 0 ; ++__s, --__n)
if (eq(*__s, __c))
return __s;
return 0;
}
查找特定字符的函数,也很简单遍历一次,这里就不再赘述
继续往下
static _CharT* move(_CharT* __s1, const _CharT* __s2, size_t __n) {
memmove(__s1, __s2, __n * sizeof(_CharT));
return __s1;
}
static _CharT* copy(_CharT* __s1, const _CharT* __s2, size_t __n) {
memcpy(__s1, __s2, __n * sizeof(_CharT));
return __s1;
}
static _CharT* assign(_CharT* __s, size_t __n, _CharT __c) {
for (size_t __i = 0; __i < __n; ++__i)
__s[__i] = __c;
return __s;
}
看函数名就可以知道它们的具体功能,这里也没什么需要注意的地方,也不多讲了
static char_type to_char_type(const int_type& __c) {
return static_cast(static_cast<unsigned char>(__c));
}
static int_type to_int_type(const char_type& __c) {
return static_cast<unsigned char>(__c);
}
函数功能参考函数名,这里的转换就是这么简单粗暴
最后一部分
static int compare(const char* __s1, const char* __s2, size_t __n)
{ return memcmp(__s1, __s2, __n); }
static size_t length(const char* __s) { return strlen(__s); }
static void assign(char& __c1, const char& __c2) { __c1 = __c2; }
static char* assign(char* __s, size_t __n, char __c)
{ memset(__s, __c, __n); return __s; }
在另一个模板类里面又有一个compare函数 不过实现方式不太一样,这个是直接调用memcmp函数
到这里这部分的源码就看完了,怎么样,其实也还是很简单的。大家可以多看看源码,不仅可以学到很多新姿势,对自己的帮助也很大