• 编程小常识


    1 以前以为memset是给一个数组赋初值,实际上呢?

    void *memset(void *s, int ch, unsigned n);

    将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作,其返回值为指向S的指针。

    所以如果这样

    int array[5] = {1,4,3,5,2};
      for(int i = 0; i < 5; i++)
      cout<<array[i]<<" ";
      cout<<endl;
      memset(array,0,5*sizeof(int));
      for(int k = 0; k < 5; k++)
      cout<<array[k]<<" ";
      cout<<endl;

    输出结果是

    1 4 3 5 2

    0 0 0 0 0

    但是如果这样

    int array[5] = {1,4,3,5,2};
      for(int i = 0; i < 5; i++)
      cout<<array[i]<<" ";
      cout<<endl;
      memset(array,1,5*sizeof(int));// 注意 这里与上面的程序不同
      for(int k = 0; k < 5; k++)
      cout<<array[k]<<" ";
      cout<<endl;

    输出结果就是

    1 4 3 5 2

    16843009 16843009 16843009 16843009 16843009
    因为memset是以字节为单位就是对array指向的内存的5个字节进行赋值,每个都用ASCII为1的字符去填充,转为二进制后,1就是00000001,占一个字节。一个INT元素是4字节,合一起就是00000001000000010000000100000001,就等于16843009,就完成了对一个INT元素的赋值了。
     
      所以用memset对非字符型数组赋初值是不可取的!(0 和-1可以。因为-1的话二进制都是1)
     
    那么什么用于赋非零的初值呢?
    fill 的头文件是<iostream> 命名空间是std;
    用法:
    eg:
    #include<iostream>
    using namespace std;
    int main()
    {
             char s[100];
             fill(s,s+100,'a');
             for(int i=0;i<100;i++)
              cout<<s[i];
           cout<<endl;
           system("pause");
    }

    2 template <typename Iter>

    后面接函数是模版函数,好久不用竟然给忘了。。。

    3 容器的迭代器

    例如vector<int> v;// v = [2,3,1,4,5]

    v.begin()就是2

    v.end()是不是5,而是5后面那个

    v.begin()+2 是1

    find(v.begin(), v.end() ,4) 查找这个vector中值为4的元素。如果找到返回那个元素的iter,如果没有则返回最后一个元素。问题是find(v.begin(), v.begin()+2,5)找不到则是直接返回v.begin()+2这个iter。根据find(v.begin(), v.end() ,4) 应该是左闭右开

    int size = distance(v.begin(), v.begin()+2)

    size = 2

    v.insert(v.begin()+i,a);在第i+1个元素前面插入a;

  • 相关阅读:
    前端ajax传数据成功发送,但后端接收不到
    POST 400 (BAD REQUEST)
    chrome浏览器本地文件支持ajax请求的解决方法
    系统可能不会保存你所做的修改 onbeforeunload
    bootstrap 常用class(不定时更新)
    webstrom 一直反复indexing
    setInterval传递参数
    在CentOS 7上安装GitLab
    「Githug」Git 游戏通关流程
    分布式版本控制系统Git——图形化Git客户端工具TortoiseGit
  • 原文地址:https://www.cnblogs.com/yxzfscg/p/4472449.html
Copyright © 2020-2023  润新知