BlueRoseNote/02-Note/读书笔记/深入应用C++11代码优化与工程级应用/深入应用c++11代码优化与工程级应用第六章.md
2023-06-29 11:55:02 +08:00

2.8 KiB
Raw Blame History

使用c++11中便利的工具

6.1 处理日期和时间的chrono库

6.1.1 记录时长的duration

std::chrono::duration <rep,std::ratio<1,1>> seconds;//表示秒

chrono的count(),可以获取时钟周期数
需要注意的是当两个duration时钟周期不同的时候会先统一周期再进行计算。
还可以通过duration_cast<>()进行时钟周期的转换

6.1.2 表示时间点的time point

6.1.3 获得系统时钟的clocks

6.1.4 计时器timer

#include<chrono>

class Timer
{
public:
	Timer() : m_begin(std::chrono::high_resolution_clock::now()) {}

	void reset()
	{ 
		m_begin = std::chrono::high_resolution_clock::now(); 
	}

	//默认输出毫秒
	int64_t elapsed() const
	{
		return std::chrono::duration_cast<std::chrono::milliseconds>(
			std::chrono::high_resolution_clock::now() - m_begin).count();
	}

	//微秒
	int64_t elapsed_micro() const
	{
		return std::chrono::duration_cast<std::chrono::microseconds>(
			std::chrono::high_resolution_clock::now() - m_begin).count();
	}

	//纳秒
	int64_t elapsed_nano() const
	{
		return std::chrono::duration_cast<std::chrono::nanoseconds>(
			std::chrono::high_resolution_clock::now() - m_begin).count();
	}

	//秒
	int64_t elapsed_seconds() const
	{
		return std::chrono::duration_cast<std::chrono::seconds>(
			std::chrono::high_resolution_clock::now() - m_begin).count();
	}

	//分
	int64_t elapsed_minutes() const
	{
		return std::chrono::duration_cast<std::chrono::minutes>(
			std::chrono::high_resolution_clock::now() - m_begin).count();
	}

	//时
	int64_t elapsed_hours() const
	{
		return std::chrono::duration_cast<std::chrono::hours>(
			std::chrono::high_resolution_clock::now() - m_begin).count();
	}

private:
	std::chrono::time_point<std::chrono::high_resolution_clock> m_begin;
};

void fun()
{
	std::cout << "hello world" << std::endl;
}

void Test()
{
	std::cout << "\nTest()\n";

	Timer t; //开始计时
	fun();

	std::cout << t.elapsed_seconds() << std::endl; //打印fun函数耗时多少秒
	std::cout << t.elapsed_nano() << std::endl; //打印纳秒
	std::cout << t.elapsed_micro() << std::endl; //打印微秒
	std::cout << t.elapsed() << std::endl; //打印毫秒
	std::cout << t.elapsed_seconds() << std::endl; //打印秒
	std::cout << t.elapsed_minutes() << std::endl; //打印分钟
	std::cout << t.elapsed_hours() << std::endl; //打印小时
}


int main(void)
{
	Test();

	system("pause");
	return 0;
}

6.2 数值类型和字符类型的互相转换

std::string to_string(type value)

std::string to_wstring(type value)

  1. atoi字符串转int
  2. atol字符串转long
  3. atoll字符串转long long
  4. atof字符串转float

6.3 宽窄字符转换

std::wstring str=L"中国人";
//宽窄字符转换器
std::codecvt_utf8
std::codecvt_utf16
std::codecvt_utf8_utf16
std::wstring_convert