C语言和C++的比较

输入输出

C语言 C++ 比较
scanf函数
printf函数
cin
cout
cin 和 cout 无需指定输入输出格式
消耗的时间比 scanf 和 printf 多得多

头文件

内容 C语言 C++
输入输出库 #include <stdio.h> #include <cstdio>
#include <iostream>
数学函数 #include <math.h> #include <cmath>
字符串有关函数 #include <string.h> #include <cstring>

变量类型

布尔型变量

C语言 C++ 比较
#include <stdbool.h> 可直接使用 true(存储时为1)
false(存储时为0)

字符串

内容 C语言 C++
表示方法 通过 字符数组 表示 通过 string类 表示
字符串长度的表示 #include <string.h>
strlen(str)
#include <string>
str.length()
字符串拼接 #include <string.h>
strcat(str1, str2); //把str2拼接到str1之后
str1 += str2;

排序函数

  • C语言 — qsort
1
2
3
4
5
6
7
#include <stdlib.h>

int cmp(const void *a, const void *b) {
return *(int *)a - *(int *)b; //升序
}

qsort(排序数组, 元素数量, 每个元素的大小(可用sizeof获得), 比较函数cmp);
  • C++ — sort
1
2
3
4
5
6
7
#include <algorithm>

bool cmp(int a, int b) {
return a > b; //降序
}

sort(首元素地址, 尾元素地址的下一个地址, 比较函数cmp(非必填));
cmp函数的区别 C语言 C++
返回值类型 int bool
排序的判断 返回值 > 0, a 将被排在b后面;
返回值 < 0, a 将被排在b前面;
默认升序
返回值为true时,a将被排在b前面
比较方式 元素相减
不能用$>$、$<$比较符(返回无负值
$>$、$<$比较符

qsort函数的使用需要运用指针,且写法上没有sort函数简洁。sort函数根据具体情形使用不同的排序方法,效率较高,在实现中规避了经典快速排序中可能出现的会导致实际复杂度退化到$O(n^2)$的极端情况

因此更推荐使用C++的sort函数进行代码编写。


申请动态内存空间

内存泄露是指申请到的内存空间在使用过后没有释放,导致一些程序内存消耗过快,最后无内存可分配的情况。一般考试中,分配的内存空间在程序结束时即被释放,因此即便不是放空间,也不会产生什么影响,并且内存大小一般也足够一道题的使用。但是从编程习惯上,需要养成即时释放空间的习惯

  • C语言

    <stdlib.h>

    • 申请内存空间 — malloc函数:

      需要申请的内存空间为参数,返回指向这块空间的指针,因为返回的指针是void*型,因此需要强制转换为对应类型typename* p = (typename*)malloc(sizeof(typename));

      示例:

      1
      2
      int* p = (int*)malloc(sizeof(int));
      node* p = (node*)malloc(sizeof(node));

      通常情况下,内存空间的申请不会失败。失败一般发生在使用malloc申请了较大的动态数组,如:int* p = (int*)malloc(1000000 * sizeof(int));。**申请失败会返回空指针NULL**。

    • 释放内存 — free函数:

      需要释放的内存空间的指针变量为参数:free(p);,执行之后,**指针变量p没有消失,只是指向了空地址NULL**。

  • C++

    • 申请内存空间 — new运算符:

      使用new + 类型名即可分配一块该类型的内存空间,返回申请的同变量类型的指针typename* p = new typename;

      示例:

      1
      2
      int* p = new int;
      node* p = new node;

      通常情况下,内存空间的申请不会失败。失败一般发生在使用new申请了较大的动态数组,如:int* p = new int[1000000];申请失败会发生异常

    • 释放内存 — delete运算符:

      需要释放的内存空间的指针变量为参数:delete(p);,执行之后,**指针变量p没有消失,只是指向了空地址NULL**。