매우 까다 롭습니다. 단지 EQ를 (재정) 작동하지 않을 것입니다 : 당신이 당신의 자신의 특성 클래스를 작성 할 필요가있는, 특별히 당신은 char_traits<>
클래스 템플릿에서 파생하고 EQ() 및 것은() 기능 (참고 비교할를 재정의 할 필요가 compare()의 재정의에 변경이 없더라도 파생 클래스에 그대로 작성해야합니다.). 이 특성 클래스 sequence_traits
을 말하고 사용자 지정 문자열 sequence
을 호출합니다. 결국 문자열은 일련의 문자입니다!
참고 : 나는 그래서 당신의 의미는 alphabets[i] == alphabets[25-i]
이 동일하게 취급 할 후, 첫 글자와 같은 마지막 문자, 두 번째 문자와 같은 초 마지막 글자, 그리고에서 이해 무엇!
struct sequence_traits : char_traits<char>
{
//'a' and 'z' are equal
//'b' and 'y' are equal
//'c' and 'x' are equal, and so on.
//that implies, 'a' + 'z' == 'b' + 'y' == 'c' + 'x' == 'd' + 'w == so on
//same for upper cases!
static bool eq(const char& left, const char& right)
{
return (left == right) || (left + right == 'a' + 'z') || (left + right == 'A' + 'Z') ;
}
static int compare(const char *first1, const char *first2, size_t count)
{
for (; 0 < count; --count, ++first1, ++first2)
if (!eq(*first1, *first2))
return (lt(*first1, *first2) ? -1 : +1);
return (0);
}
};
그리고 당신은 쉽게 사용이 typedef
을 할 수는 :
typedef basic_string<char, sequence_traits> sequence;
당신은 완료됩니다. 지금 sequence
을 사용할 수 있습니다.:-)
근무 예 : http://www.ideone.com/ByBRV
그것이 구체적으로 어떻게 작동하는지 알고이 기사를 읽기 : http://www.gotw.ca/gotw/029.htm
은 나뿐만 아니라 C++에 새로 온 사람하지만이 함께 할 수있는 뭔가가 생각 캐릭터 특성. – dreamlax