1、C++ 中实现realloc(浅复制、深复制)
C++没有函数能够替代realloc,只有在C++中把原来的空间delete掉,再重新new一个
template<typename T> T* realloc(T* &p,size_t oldsize,size_t newsize){ T* tmp=new T[newsize]; memcpy(tmp,p,oldsize*sizeof(T)); delete []p; return p=tmp; } int main(){ int* p=new int[5]; for(int i=0;i<5;i++) p[i]=i; realloc(p,5,15); }
2、求系统时间的差值
#define NOMINMAX#include <algorithm>#include <windows.h>SYSTEMTIME systemtime_difference(SYSTEMTIME const& st1, SYSTEMTIME const& st2){ FILETIME ft1; SystemTimeToFileTime(&st1, &ft1); ULARGE_INTEGER const u1 = { ft1.dwLowDateTime, ft1.dwHighDateTime }; FILETIME ft2; SystemTimeToFileTime(&st2, &ft2); ULARGE_INTEGER const u2 = { ft2.dwLowDateTime, ft2.dwHighDateTime }; ULARGE_INTEGER u3; u3.QuadPart = std::max(u1.QuadPart, u2.QuadPart) - std::min(u1.QuadPart, u2.QuadPart); FILETIME const ft3 = { u3.LowPart, u3.HighPart }; SYSTEMTIME st3; FileTimeToSystemTime(&ft3, &st3); // FILETIME's starting point is 1601-01-01 st3.wYear -= 1601; st3.wMonth -= 1; st3.wDay -= 1; st3.wDayOfWeek = 0; // useless for this purpose, make it always 0 so it's always ignored return st3;}
测试代码:
int main(){ SYSTEMTIME const st1 = { 2008, 10, 3, 15, 6, 5, 31, 12 }; SYSTEMTIME const st2 = { 2009, 12, 0, 27, 10, 7, 59, 56 }; SYSTEMTIME st3 = systemtime_difference(st1, st2); return 0;}
联系客服