精华内容
下载资源
问答
  • std::memcpy
    2022-02-25 17:50:25

    memcpy,std::copy_n,std::copy三者的区别:

    更多相关内容
  • memmove,memcpystd::copy

    2020-09-16 11:43:20
    memcpy比memmove执行效率要高. 个人觉得,保证没有重叠的情况下,肯定还是用memcpy. 只有可能有重叠的情况下,再用memmove了. 从实现的正确性上来讲,memmove可以认为是memcpy的safeversion,由于历史原因,很多函数...

    https://exp.newsmth.net/topic/article/6620bd0c76367efa077deaebd0b2c4f1

     

    memcpy比memmove执行效率要高.

    个人觉得,保证没有重叠的情况下,肯定还是用memcpy.

    只有可能有重叠的情况下,再用memmove了.

    从实现的正确性上来讲,memmove可以认为是memcpy的safe version,由于历史原因,很多函数都有safe version。

     

     

     

    展开全文
  • void vector2rawArray(const std::vector<T>& vctData, geoRawArray<T>& rawData) { size_t nCount = vctData.size(); if (nCount == 0) { rawData.clear(); return; } rawData.resize...
    template <typename T>
    void vector2rawArray(const std::vector<T>& vctData, geoRawArray<T>& rawData)
    {
    	size_t nCount = vctData.size();
    	if (nCount == 0)
    	{
    		rawData.clear();
    		return;
    	}
    	rawData.resize(nCount);
    	memcpy(&rawData[0], &vctData[0], sizeof(vctData[0])*nCount); // 重点内容,vector内容复制
    }
    

    geoRawArray为q3d库中定义的数组模板类,定义如下:

    
    template<class T, class _qAlloc = qAllocGetMempool>
    class geoRawArray:public qAllocArray<T, _qAlloc>
    {
    public:
    	geoRawArray(qAllocMempool* pMem = NULL):qAllocArray<T, _qAlloc>(pMem){}
    	geoRawArray(const qAllocArray<T, _qAlloc>& vec, qAllocMempool* pMem = NULL)
    	:qAllocArray<T, _qAlloc>(vec,pMem){}
    	geoRawArray(size_t nsize, qAllocMempool* pMem = NULL)
    	:qAllocArray<T, _qAlloc>(nsize, pMem) {}
    	~geoRawArray(void) {}
    };
    
    
    展开全文
  • std::strcpy、strncpy、memset、memcpy用法

    千次阅读 2016-12-09 17:28:18
    1. std::strcpy 功能:将一个字符串复制到另一个字符串(如果字符串重叠,该行为是未定义); 定义于头文件 <cstring> char *strcpy( char *dest, const char *src );参数: destinationPointer to the ...

    1. std::strcpy

    功能:将一个字符串复制到另一个字符串(如果字符串重叠,该行为是未定义);
    定义于头文件 <cstring>

     char *strcpy( char *dest, const char *src );

    参数:
    destination

    Pointer to the destination array where the content is to be copied.

    source

    C string to be copied.

    Return Value

    destination is returned.

    dest :指向复制内容存放的首地址
    src :需要被复制的C风格的字符串
    返回值 :复制后的字符串的首地址

    Example:

    /* strcpy example */
    #include <iostream>
     #include <cstring>
     using namespace std;
      int main ()
      {
        char str1[]= "Sample string";
        char str2[40];
        char str3[40];
       strcpy (str2,str1);
       strcpy (str3,"copy successful");
    
       cout<<"str1:"<<str1<<endl;
       cout<<"str2:"<<str2<<endl;
       cout<<"str3:"<<str3<<endl;
    
       return 0;
     }

    Output:

    str1: Sample string
    str2: Sample string
    str3: copy successful

    2.std::strncpy

    定义于头文件<cstring>

    char *strncpy( char *dest, const char *src, std::size_t count );

    功能:将一个字符串的一部分复制到另一个字符串;
    说明:从原地址source开始,复制num个字符到dest开始的地址;
    destination

    Pointer to the destination array where the content is to be copied.

    source

    C string to be copied.

    num
    Maximum number of characters to be copied from source.
    size_t is an unsigned integral type.

    说明:从源地址source开始,复制num个字符到dest开始的地址

    Example

    C版:

        /* strncpy example */
    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
      char str1[]= "To be or not to be";
      char str2[40];
      char str3[40];
    
      /* copy to sized buffer (overflow safe): */
      strncpy ( str2, str1, sizeof(str2) );
    
      /* partial copy (only 5 chars): */
      strncpy ( str3, str2, 5 );
      str3[5] = '\0';  ** /* null character manually added */**
    
      puts (str1);
      puts (str2);
      puts (str3);
    
      return 0;
    }

    Output:

    To be or not to be
    To be or not to be
    To be

    C++:

    #include <iostream>
    #include <cstring>
    
    int main()
    {
        const char* src = "hi";
        char dest[6] = {'a', 'b', 'c', 'd', 'e', 'f'};;
        std::strncpy(dest, src, 5);
     //多出的用空字符填充
        std::cout << "The contents of dest are: ";
        for (char c : dest) {
            if (c) {
                std::cout << c << ' ';
            } else {
                std::cout << "\\0" << ' ';
            }
        }
        std::cout << '\n';
        return 0;
    }

    output:
    The contents of dest are: h i \0 \0 \0 f

    3.std::memcpy

    定义于头文件 <cstring>

    void * memcpy ( void * destination, const void * source, size_t num );

    功能:将一个缓冲区复制到另一个缓冲区;

    Example

    #include <iostream>
    #include <cstring>
    
    int main()
    {
        char source[] = "once upon a midnight dreary...";
        char dest[4];
        std::memcpy(dest, source, sizeof dest);
        for (char c : dest) {
            std::cout << c << '\n';
        }
        return 0;
    } 

    output:
    o
    n
    c
    e

    4.std::memset

    定义于头文件 <cstring>

    void* memset( void* dest, int ch, std::size_t count );

    Fill block of memory

    Sets the first num bytes of the block of memory pointed by ptr to the specified value (interpreted as an unsigned char).

    功能:将指针ptr所指向的内存空间开始的num个内存单元设置成value的值;

    参数:
    ptr

    Pointer to the block of memory to fill.

    value

    Value to be set. The value is passed as an int, but the function fills the block of memory using the unsigned char conversion of this value.

    num

    Number of bytes to be set to the value.
    size_t is an unsigned integral type.

    C:

    /* memset example */
    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
      char str[] = "almost every programmer should know memset!";
      memset (str,'-',6);
      puts (str);
      return 0;
    }

    Output:

    —— every programmer should know memset!

    C++版:

    #include <iostream>
    #include <cstring>
    
    int main()
    {
        int a[20];
        std::memset(a, 0, sizeof(a));
        std::cout << "a[0] = " << a[0] << '\n';
        return 0;
    }

    output:
    a[0] = 0

    附:整个用法代码全

    /*Jason Gel        2016-12-9   编辑器:vs2013
    *博客地址:http://write.blog.csdn.net/postlist/0/0/enabled/2
    *说明:std:strcpy、strncpy、memcpy、memset的用法,将相应的子函数变成main函数即可。
    */
    #define _CRT_SECURE_NO_WARNINGS
    #include <iostream>
    #include <cstring>
    using namespace std;
    
    int main_strcpy()
    {
        char str1[] = "Sample string";
        char str2[40];
        char str3[40];
        strcpy(str2, str1);                 // str2 <-----str1
        strcpy(str3, "copy successful");    //  str3<-----const char *
    
        cout << "str1:" << str1 << endl;
        cout << "str2:" << str2 << endl;
        cout << "str3:" << str3 << endl;
    
        system("pause");
        return 0;
    }
    
    int main_strncpy()
    {
        const char* src = "hi";
        char dest[6] = { 'a', 'b', 'c', 'd', 'e', 'f' };;
        std::strncpy(dest, src, 5);    // dest <----(5个char)---src
        cout << dest[0] << endl;    
        cout << dest[1] << endl;
    
        if (dest[2] == 0 && dest[2] =='\0')
            cout << "des[2]为空字符" << endl;
        //多出的用空字符填充
        std::cout << "The contents of dest are: ";
        for (char c : dest) {       //范围for循环,同 for( auto c: dest )
            if (c) {
                std::cout << c << ' ';
            }
            else {
                std::cout << "\\0" << ' ';
            }
        }
        std::cout << '\n';
        system("pause");
        return 0;
    }
    int main_memcpy()
    {
        char source[] = "once upon a midnight dreary...";
        char dest[4];
        std::memcpy(dest, source, sizeof dest);  //dest<---(4个char)--source
        for (char c : dest) {
            std::cout << c << '\n';
        }
        system("pause");
        return 0;
    }
    
    int main()
    {
        int a[20];
        std::memset(a, 0, sizeof(a));         //a<----(20个int)--0
        std::cout << "a[10] = " << a[10] << '\n';
        system("pause");
        return 0;
    }
    展开全文
  • #include <iostream>...using namespace std; int main() { using Vector3 = std::array<double, 3>; double p1[3], p2[3], p3[3]; Vector3 vertex[3]; vertex[0] = {1, 2, 3}; vertex[1] =
  • 闲:测试memcpystd::copy vector之间拷贝

    千次阅读 2017-07-28 13:51:00
    memcpy: " (( double )(end-start)/CLOCKS_PER_SEC) std::endl; 53 // Display(vec4_); 54 55 56 return 0 ; 57 } 注意点:memcpy 只能按字节拷贝,所以选择char进行,实际意义不明显... ...
  • memcpy参考【C/C++笔记:动态内存分配】 char strA[0x10] = "123"; char strB[0x10] = "456"; char strC[0x20]; memcpy(strC, strA, strlen(strA)); memcpy(strC + strlen(strA), strB, strlen(strB) + 1); ...
  • std::move 和 std::swap

    2019-09-30 15:01:18
    1、swap的实现是基于move的(自己实现的) template<typename T>... T temp = std::move(a); a = std::move(b); b = std::move(temp); } 2、移动构造和移动赋值操作符重载 #include &...
  • 编译出错的命令 g++ thread.cpp ...using namespace std; int main(); class abc { friend int print(); protected: string m_string; public: string get(); }; string abc::get() { return m_string; }
  • 默认情况下,std::shared_ptr会调用delete来清空内存。当使用new[] 分配内存时,需要调用delete[] 来释放内存,否则会有内存泄露。 可以通过以下代码来自定义释放内存的函数: template< typename T > ...
  • 问题遇到的现象和发生背景 问题相关代码,请勿粘贴截图 /* function : 对数组进行... } } 运行结果及报错内容 "std::vector *" 类型的实参与 "int *" 类型的形参不兼容 我的解答思路和尝试过的方法 我想要达到的结果
  • 最近在写一些有关AI的算法,需要的一些数据结构要用到复制的操作。因此在这里测试了一下各种数据的复制速度,编译器支持C++11/14。 #include <iostream>...using std::chrono::high_resolution_cloc
  • std::array的使用

    2021-10-27 11:19:05
    std::array是在C++11中才引入的,与内置数组相比,array是一种更安全、更容易使用的数组类型。与内置数组类似,array对象的大小是固定的。因此,array不支持添加和删除元素以及改变容器大小的操作。与内置数组一样,...
  • c++11 std::move

    2020-05-06 13:56:12
    std::move方法将左值转换为右值,方便实现移动构造。当一个对象内部有很大的堆内存或者动态数组时,有必要写move语义的拷贝构造函数和赋值函数,避免无谓的深拷贝,以提高性能。c++中所有的容器都实现了move语义,...
  • std::copy用法

    千次阅读 2020-11-16 13:45:24
    std::copy的用法 std::copy是C++标准库中的算法接口,主要用于两个容器间的复制,据说其效率要优于自己用for循环逐个复制。
  • c++ 多线程 线程锁与信号量使用,std::mutex,std::list,CreateSemaphore,CreateThrea main.cpp // ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include "pch.h" ...
  •  #include using namespace std; int main() { string str("hello world); { string str2(str.c_str(), str.size()); (void*) str2.c_str(); } return 0; } 这样str2因为他的构造string到底是一个char*还是一个...
  • void * memcpy ( void * destination, const void * source, size_t num ); Copies the values of  num  bytes from the location pointed by  source  directly to the memory block pointed by ...
  • C++11中std::array的使用

    万次阅读 多人点赞 2017-05-30 13:57:56
    C++11中std::array的使用
  • std::string其实还是存储了C-String这个指针,只不过不同的编译期对std::string中的存储结构都做了不同的处理,这里我们不讨论std::string的实现,只关心一件事,那就是C-String和std::string的相互转换。...
  • std :: string to char *

    2020-07-17 11:48:09
    I want to convert a std::string into a char* or char[] data type. 我想将std :: string转换为char *或char []
  • C++中std::fill/std::fill_n的使用

    万次阅读 2016-10-22 22:12:45
    C++中std::fill/std::fill_n的使用
  • std::memcpy(hostDataBuffer, inputdata, numbers * sizeof(float)); std::vector 转化为Eigen::Matrix std::vector data(16); Eigen::Map(data.data(), 4, 4) 数组转化为Eigen::Matrix double Transform[16]={0}; ...
  • ),移动构造函数,移动复制运算符以及std::move, 对于它们之间的关系和具体应用场景很多人还是云里雾里,这里结合具体的例子谈一下自己的看法。 1 拷贝构造函数、赋值构造函数和深浅拷贝 要理解右值引用(&...
  • std::function 的性能陷进

    千次阅读 2019-08-24 17:31:35
    std::function 的作用很强大,他让vector等保存不同类型函数的对象: function, functor, lambda…成为了可能。但他有一个潜在的性能风险:在保存lambda/bind时,如果对象的大小 大于两个指针的大小,他就需要分配...
  • 5.2.6 std::atomic<>主要类的模板 主模板的存在,在除了标准原子类型之外,允许用户使用自定义类型创建一个原子变量。不 是任何自定义类型都可以使用std::atomic<> 的:需要满足一定的标准才行。为了...
  • C++并发实战16: std::atomic原子操作

    千次阅读 2019-06-25 20:29:09
    T能够被memcpy、memcmp函数使用,从而支持compare/exchange系列函数。有一条规则:不要在保护数据中通过用户自定义类型T通过参数指针或引用使得共享数据超出保护的作用域。atomic编译器通常会使用一个内部锁保护,而...
  • std::string类型变量比较的问题

    千次阅读 2019-01-21 15:43:45
    std::string型变量比较是,最好是两个std::string变量比较 如std::string和char*比较涉及到\0的问题, std::string str(“asdf”);...memcpy(szTmp,”asdf”,4); str == szTmp 这个是不相等的 cha...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 64,069
精华内容 25,627
关键字:

std::memcpy