string实际上模板类basic_string的实例重命名
typedef basic_string<char> string;
而模板类basic_string的定义如下:
template <
class charT,
class traits = char_traits<charT>, // basic_string::traits_type
class Alloc = allocator<charT> // basic_string::allocator_type
>
class basic_string;
char_traits类提供了常用的用于比较和查找的功能,可以通过提供新的char_traits类,从而改变string比较和查找的行为,比如创建一个不区分大小写的string类:
#include <string>
#include <iostream>
using namespace std;
class ci_char_traits :public char_traits <char>
{
public:
static bool eq(char c1, char c2)
{
return toupper(c1) == toupper(c2);
}
static bool lt(char c1, char c2)
{
return toupper(c1) <toupper(c2);
}
static int compare(const char *s1, const char *s2,size_t n)
{
for(size_t i