营销型网站框架图,企业员工培训课程,六安人论坛最新招聘信息,网站建设项目甘特图用以封装文化差异的多态刻面的集合 std::locale 类型对象是不可变平面的不可变索引集。 C 输入/输出库的每个流对象与一个 std::locale 对象关联#xff0c;并用其平面分析及格式化所有数据。另外#xff0c; locale 对象与每个 std::basic_regex 对象关联。 locale 对象亦可…用以封装文化差异的多态刻面的集合 std::locale 类型对象是不可变平面的不可变索引集。 C 输入/输出库的每个流对象与一个 std::locale 对象关联并用其平面分析及格式化所有数据。另外 locale 对象与每个 std::basic_regex 对象关联。 locale 对象亦可在标准容器和算法中用作进行字符串对照的谓词而且能被直接访问以获得或修改其所保有的平面。
C 程序中构造的每个 locale 至少保有下列标准平面但程序可以定义额外特化或全新的平面并将它们添加到任何既存的 locale 对象。 用此 locale 的 collate 刻面以字典序比较两个字符串
std::locale::operator()
template class CharT, class Traits, class Alloc bool operator()( const basic_stringCharT,Traits,Alloc s1, const basic_stringCharT,Traits,Alloc s2) const;
按照此 locale 的 std::collatecharT 平面所定义的比较规则比较二个 string 参数 s1 与 s2 。此运算符允许以任何拥有 collate 平面的 locale 对象为标准算法如 std::sort 和有序容器 std::set 中的二元谓词。
参数
s1-要比较的第一字符串s2-要比较的第二字符串
返回值
若 s1 按字典序小于 s2 则为 true 否则为 false 。
可能的实现
templateclass CharT, class Traits, class Alloc
bool operator()(const std::basic_stringCharT,Traits,Alloc s1,const std::basic_stringCharT,Traits,Alloc s2) const;
{return std::use_facetstd::collateCharT(*this).compare(s1.data(), s1.data() s1.size(),s2.data(), s2.data() s2.size() ) 0;
}
调用示例
#include locale
#include algorithm
#include vector
#include string
#include cassert
#include iostream
#include codecvtint main()
{std::vectorstd::wstring vector1 {Lжил, Lбыл, Lкот};std::sort(vector1.begin(), vector1.end(), std::locale(Chinese (Simplified)_China.936));assert(vector1[0] Lбыл);assert(vector1[1] Lжил);assert(vector1[2] Lкот);assert(vector1[0] ! Lбыл);assert(vector1[1] ! Lжил);assert(vector1[2] ! Lкот);return 0;
}
输出
Assertion failed: vector1[0] ! Lбыл, file ..\..\qt_code\locale\main.cpp, line 17 更改全局本地环境
std::locale::global static locale global( const locale loc );
以 loc 替换全局 C 本地环境这表示将来所有对 std::locale 的默认构造函数的调用将返回 loc 的副本。若 loc 拥有名称则亦如同用 std::setlocale(LC_ALL, loc.name().c_str()); 替换 C 本地环境。此函数是修改全局 C 本地环境的唯一方式否则全局 C 本地环境等价于程序启动时的 std::locale::classic() 。
参阅
loc-新的全局 C locale
返回值
全局 C locale 的先前值。 获得到 C 本地环境的引用
std::locale::classic static const locale classic();
获得到实现经典 C 本地环境语义的 C 本地环境的引用。此本地环境不同于全局本地环境不能改变。
参数
无
返回值
返回到 C 本地环境的引用。
注意
一些标准要求的平面如 UTF-8/UTF-32 转换平面 std::codecvtchar32_t, char, std::mbstate_t 无 C 本地环境中的等价版本然而它们存在于 std::locale::classic() 返回的 locale 中同任何其他构造于 C 程序中的 locale 。
调用示例
#include locale
#include clocale
#include algorithm
#include vector
#include string
#include cassert
#include iostream
#include codecvtint main()
{std::locale locale1 std::locale::classic();std::cout locale1.name(): locale1.name() std::endl;std::locale::global(std::locale(Chinese (Simplified)_China.936));std::locale locale2 std::locale::classic();std::cout locale2.name(): locale2.name() std::endl;return 0;
}
输出
locale1.name(): C
locale2.name(): C