编程问题记录

  1. 网络字节序和主机字节序不同,导致数据位置出错,Short 2字节以上用htons()
  2. 字节序对齐   #pragma pack(1)

3.计时
#include <time.h>
clock_t startTime =clock();
{待测程序}
clock_t endTime=clock();
 cout<<"Time cost:"<<double(endTime-startTime)/CLOCKS_PER_SEC<<" s"<<endl;

4.assert()函数用法
4.1  #include <assert.h>
     void assert( int expression );//如果里面的表达式返回错误则终止程序的执行
4.2  注意:每个assert只检验一个条件(不建议多个条件&),因为同时检验多个条件时,如果断言     失败,无法直观的判断是哪个条件失败
     不能使用改变环境的语句,例如assert(i++<100)//若在执行之前i=100,那么这条语句就不会     执行,那么i++这条命令就没有执行。
     正确:
     assert(i < 100);
     i++;
4.3  assert和后面的语句应空一行,以形成逻辑和视觉上的一致感。
     有的地方,assert不能代替条件过滤。

5.一旦在数组方括号内取值的话就要注意数组越界的问题
   比如arr[b+1]

6.抄算法代码时注意灵活
  有的比较关系的变量注意先后顺序
  注意是a<b还是b<a或者 a<=b或者b<=a

7.   int     long      long long    unsigned long
 16  2字节     4         8              4
 32   4        4        
 64   4        8        8              8

在int越界的情况下不可以 int i;
                        long long k=i*i;
应该: long long i;
       long long k=i*i;

8.有的时候从后往前遍历更方便一些
  有的时候立个flag可以解决很多问题
  有的时候为了缩小范围,需要用最大值减去最小值

9.自己调用的每个 函数 都要明白它的行为

 最低要求是把这个函数的注释看一下

 

 高要求就是 再看看 实现


10.int f1;
  int f2;
两个数组比较不能用(f1==f2);//因为这比较的是地址

11.在处理链表问题时,很多时候要多设立指针帮助保存更多信息
  包括 cur,pre,next指针

12.获取数组长度 可以int n=sizeof(arr)/sizeof(int) //比较严谨
  C++内存管理是开发者的任务。释放新建的链表空间

13.字符串字面值与string是2种不同的类型
  +号两端必须至少有一个是string类型,不能每个都是字符串字面值

14.leetcode 136除了一个元素出现1次外,其他元素都出现两次,找出只出现一次的数字
 !!!!!异或!!!!二进制按位异或
int a=nums[0];
for(int i=1;i<nums.size();i++)
  a=a^nums[i];

return a;

        1.异或满足交换律。
        2.相同两个数异或为0。
        3.0异或一个数为那个数本身。
         最后结果即出现1次的那个数。
         例子:1^2^3^4^4^3^2 = 2^2^3^3^4^4^1 = 1


15.  链表处理中设置一个虚拟头结点可以有效地避免对头节点的特殊处理
     ListNode* dummyHead=new ListNode(0);
    //防止内存泄漏,所以new之后要delete,可以设置新节点指向要delete的节点但不new

16.在嵌套的关系中使用栈顶元素来寻找最近的匹配的元素

17.int a=0和int a区别

  前者是在内存中开辟了一块叫做a的内存空间,里面存放0;后者表示  将要开辟内存空间了,但是还没有开辟


  简单的说,int a=0相当于建了一座仓库,然后再里面装了货物

  而 int a相当于拿到了一块地契,留着以后要建仓库用的

  malloc需要include stdlib.h 需要用户计算分配空间的大小
  new 不依赖于头文件  不需要计算

18.链表创建为什么需要分配内存空间
  假如有1000个已经定义的结构体,能否直接创建链表?

   1)这是可以的,但是这样就违背了链表出现的初衷(动态扩展)。
   2)另外,直接在全局定义的结构体,存储在静态存储区;在函数内    定义的结构体,存储在栈区;而使用malloc来申请空间的结构体,      存储在堆空间中。链表一般都放在堆空间中。

19.isalpha、isalnum、islower、isupper用来判断【一个字符】是否是字母/数字/小写/大写

20.使用vector不仅需要#include <vector>还需要using namespace std;/using std::vector;

21注意new后面()和[]的区别。

申请内存应该是

 char *p = new char[10] ;//假设是申请10个字节
而char *p = new char(10);//是申请一个字节的内存,并把这个字节的内存赋值10
区别太大了。

22.free() xxxxxx错误
  访问了不合法的下标,检查vector;vector长度不固定,改为长度固定的数组就通过了 具体见leetcode 389找不同
  结论:当字符串中仅有小写字母出现统计字符串中字符的频率时用数组

23头文件重复包含可能会导致重定义的问题

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值