算法基础课get总结

#include<string.h>

1. memset(void *buffer, int c, int count)
   buffer:为指针或是数组,c:是赋给buffer的值,count:是buffer的长度.
   memset 函数按照字节进行赋值,上面的c是指出的是一个字节被赋的值.
   如 1.有一个数组int a[len_a]  对其初始化 memset(a,0,size(int)*len_a) 注意memset只能对数组初始化。
      2.常见的最大化初始值 memset(a,0x3f,sizeof a) 算法竞赛中常常设置最大值为0x3f3f3f3f,但其实这不是最大值,最大值为0x7f7f7f7f,这样设置是为了防止操作中的数据溢出,并且0x3f3f3f3f 和 0x7f7f7f7f 是在同一个数量级的,因此数据大小上可以相互替换
      3.memset(h,-1,sizeof h); 对数值进行初始化的时候,初始化语句不能放在所有函数的外面(即和全局变量放一块),要放在函数里面。

2. strlen()求字符数组的长度,注意这个是对字符数组来说的,对于string类型没有这个函数,它的长度函数是 string.size()

3. strcmp()比较两个字符数组的大小,比较的时候不考虑数组的长度,只关心两数组第一个不同元素的大小。如:aaaa和b 如果用strcmp()来比较的话就是aaaa大。
   对于string类型可以直接用<、>、==运算符来比较两string字符串的大小,但是比较规则和strcmp()的比较规则是相同的。

4. memcpy()常用于将一个数组复制到另外一个数组中,效率比较快。如 memcpy(d,a,sizeof (a)); 将a数组中的元素复制到d数组中。
scanf()函数输入字符/字符串:
    1. scanf (“%s”,name)——从键盘接收一个字符串,存储到以name为首地址的数组中;

    2. scanf (“%c”,name)——从键盘接收一个字符,赋给指针name所指的变量;若name是数组名,则接收的字符被存储到name[0]中。

print()函数输出字符/字符串
    1. 输出一个字符数组char c[]中的内容: print("%s",c) 
C++ 默认大根堆    priority_queue<int> heap;
C++ 改为小根堆    priority_queue<int,vector<int>,greater<int>> heap;
STL 堆操作:q.size() 返回堆中元素的个数  q.top() 返回堆中堆顶的元素  
          q.pop() 返回堆顶元素        q.push() 向堆中插入一个元素
图:
在图的最短路相关的题目中,无向图其实是特别的有向图,当出现一条有向边x -> y的时候,一般操作是将邻接矩阵中的matrix[x][y]元素设成其权重weight.
当出现一条无向边 x - y的时候,就同时将matrix[x][y] 和 matrix[y][x] 都设置成该边的权重值。

稠密图:一般采用邻接矩阵存储    最短路
稀疏图:一般采用邻接表存储     拓扑排序

对于结构体使用STL的sort排序: 重加载小于操作符
    
struct time{
    int st;
    int ed;
    bool operator < (const time &b) const{
        if (ed != b.ed) return ed < b.ed;
        return st > b.st;
    }
}a[110];
按位取反操作,是以二进制位为基本单位的。  在进行按位取反的时候,对于有符号位的数来说的话,会连带着将符号位也进行取反操作。

错误❌示例: int x = 0; ~x //直接对int型数字进行取反操作,以为~x的结果是1
            int x = 1; ~x //直接对int型数字进行取反操作,以为~x的结果是0
  
正确✔结果:  int x = 0; ~x //~x的结果是 -1
            int x = 1; ~x //~x的结果是 -2

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值