看vector的insert方法时跟到最后有一段关于memmove的调用,总觉得不得劲,想知道它的实现
看了个大佬的博客,记录一下
其中关键的三点如下:
(1)当源内存的首地址等于目标内存的首地址时,不进行任何拷贝
(2)当源内存的首地址大于目标内存的首地址时,实行正向拷贝
(3)当源内存的首地址小于目标内存的首地址时,实行反向拷贝
void* memmove(void* dest, const void* src, size_t n) { char * d = (char*) dest; const char * s = (const char*) src; if (s>d) { // start at beginning of s while (n--) *d++ = *s++; } else if (s<d) { // start at end of s d = d+n-1; s = s+n-1; while (n--) *d-- = *s--; } return dest; }
原文链接:https://blog.csdn.net/yzy1103203312/article/details/81006029