# std::collate<CharT>::transform, do_transform

< cpp‎ | locale‎ | collate

定义于头文件 `<locale>` |  |
public: string_type transform( const CharT* low, const CharT* high ) const; | (1) |
protected: virtual string_type do_transform( const CharT* low, const CharT* high ) const; | (2) |

1) 公开成员函数，调用最终导出类的受保护虚成员函数 `do_transform` 。
2) 转换字符序列 `[low, high)` 为 string ，使得它与在另一字符串上调用 `transform()` 的结果以字典序比较，会产生在二个相同字符串上调用 do_compare() 的相同结果。

### 参数

low | - | 指向要变换的字符序列中首字符的指针
high | - | 要变换的序列的尾后一位置指针

### 返回值

变换后的字符串，它使得被变换字符串的字典序比较能用于取代原字符串的对照。 "C" 本地环境中，返回的字符串为 `[low, high)` 的准确副本。其他本地环境中，返回字符串的内容是实现定义的，而且可考虑到大小可能更长。

### 注意

在对照中的使用外，被变换字符串的本地环境限定格式还为 std::regex_traits::transform_primary 所知，它能释出等价类信息。

### 示例

    #include <iostream>
    #include <iomanip>
    #include <locale>

    int main()
    {
        std::locale::global(std::locale("sv_SE.utf8"));
        auto& f = std::use_facet<std::collate<wchar_t>>(std::locale());

        std::wstring in1 = L"\u00e4ngel";
        std::wstring in2 = L"\u00e5r";

        std::wstring out1 = f.transform(&in1[0], &in1[0] + in1.size());
        std::wstring out2 = f.transform(&in2[0], &in2[0] + in2.size());

        std::wcout << "In the Swedish locale: ";
        if(out1 < out2)
             std::wcout << in1 << " before " << in2 << '\n';
        else
             std::wcout << in2 << " before " << in1 << '\n';

        std::wcout << "In lexicographic comparison: ";
        if(in1 < in2)
             std::wcout << in1 << " before " << in2 << '\n';
        else
             std::wcout << in2 << " before " << in1 << '\n';

    }

输出：

    In the Swedish locale: år before ängel
    In lexicographic comparison: ängel before år

### 参阅

strxfrm | 变换字符串，使得 strcmp 会返回与 strcoll 相同的结果 (函数)
wcsxfrm | 变换宽字符串，使得 wcscmp 会产生与 wsccoll 相同的结果 (函数)