map::emplace不总是比map::insert快

自C++11起,标准库中的许多集合类型提供了emplace函数,可以在集合内直接创建新元素,而不需要将现有元素复制或移动到集合内。在很多情况下,使用emplace函数能够减少复制或移动构造函数的开销,能提供比insertpush等函数更高的性能。但对于std::mapstd::unordered_map而言,在某些情况下insert可能比emplace更快。

继续阅读“map::emplace不总是比map::insert快”

Visual C++使用UTF-8编码

Visual C++工程中的代码文件默认使用ANSI编码,这样容易导致以下问题:

  1. 在其他语言的环境中编辑、生成工程时可能会出现乱码,因为ANSI的具体编码取决于系统设置;
  2. 在引用第三方库(通常是UTF-8格式)的头文件时,不能正确解析文件中的非ASCII字符。

要在Visual C++的工程中使用UTF-8编码,需要实现两个目标:

  1. 让Visual Studio以UTF-8编码保存代码文件;
  2. 让编译器以UTF-8编码编译代码文件。
继续阅读“Visual C++使用UTF-8编码”