C语言中C++标准11实现的std :: move函数

0 c c++ std c++11

我们都知道在C++标准11中实现的std :: move函数的强大功能,它将特定范围内的元素移动到新范围.

我想知道我是否可以在纯C代码中开发这样的功能.我的代码是用C语言编写的,我希望有类似于C++的std :: move函数,我可以在不使用临时缓冲区的情况下将整数元素的范围移动到新的范围内.

pax*_*blo 5

关于你的文字:

...将特定范围内的元素移动到新范围内.

和:

...我可以在不使用临时缓冲区的情况下将一系列整数元素移动到新范围内.

我认为你所追求的是memmove.它就像是memcpy处理重叠区域而没有问题.

例如,以下代码将范围从3到6(从零开始)移动(复制,实际)元素到范围2到5:

#include <stdio.h>
#include <string.h>

int main (int argc, char *argv[]) {
    int xyzzy[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    memmove (&(xyzzy[2]), &(xyzzy[3]), sizeof(*xyzzy) * 4);
    printf ("{ %d", xyzzy[0]);
    for (int i = 1; i < sizeof(xyzzy) / sizeof(*xyzzy); i++)
        printf (", %d", xyzzy[i]);
    printf (" }\n");

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

基本上:

 {0 1 2 3 4 5 6 7 8 9}
        | | | |
       / / / /
      | | | |
      V V V V
 {0 1 3 4 5 6 6 7 8 9}
Run Code Online (Sandbox Code Playgroud)

  • @skypjack,基于文本,我相信我的解释是正确的,即:`将一系列整数元素移动到一个新的范围内. (2认同)