合并区间&C和C++的区别、布尔、整型、浮点、指针类型和0做比较、malloc、calloc、realloc的区别

56. 合并区间

class Solution {
public:
    vector<vector<int>> merge(vector<vector<int>>& intervals) {
        //先按照每个区间的左元素排序,这样每个区间的左边界就固定了,所以之后考虑相邻的
        //区间是否是相交的就行 类似与栈的操作
        //先放进栈一个区间,第一个区间的左边界一定是整个大区间的最左边界
        //这个点是固定的 不用考虑 然后考虑每两个相邻的区间 
        //如果第一个区间的右边界大于第二个区间的左边界,就说明这两个区间是相交的
        //要合并区间 左边界取第一个区间的左边界 右边界取两个区间右边界的最大值
        //放入ans数组 除第一次ans为空的情况直接插入第一个区间 
        //之后每次比较的两个区间就是ans.back()和intervals数组中最左边没有考虑的区间
        sort(intervals.begin(),intervals.end());
        vector<vector<int>> ans;
        for(auto &it:intervals)
        {
            if(!ans.empty()&&it[0]<=ans.back()[1])
            {
                int l = ans.back()[0];
                int r = max(it[1],ans.back()[1]);
                ans.pop_back();
                ans.push_back({l,r});
            }else{
                ans.push_back({it[0],it[1]});
            }
        }
        return ans;
    }
};

C和C++的区别

头文件

● C语言的头文件结尾有.h

● C++的头文件没有.h

● C++中使用C的头文件可以把.h去掉 在前面补一个c 比如math.h和cmath

前缀c和后缀.h

        使用c开头的头文件是为了标明这是C++版本的C语言标准库,这些库函数和宏定义都是在std命名空间里的,提供了更好的兼容性和类型安全性。而.h的头文件依然可以在C++中直接使用,并且这些函数和宏定义是直接可以在全局作用域中使用的,不属于任何的命名空间

C语言是过程式编程语言,C++是面向对象的编程语言,兼顾过程式编程

C++相对C语言增强了类型检查,结构体允许定义函数了(类似于class,访问权限默认是public)支持了类、对象、继承、多态、封装、抽象、构造函数、析构函数、new、delete、引用、模版、STL容器、算法库、迭代器、命名空间、默认函数参数、函数重载、运算符重载、异常处理、多线程支持。

布尔、整型、浮点、指针类型和0做比较

bool:

  • 0 比较时,布尔值会保持自身语义,不会出现精度或隐式转换问题。
  • 直接使用布尔变量进行条件判断更自然(如 if (b1)if (!b2))。

整型

  • 整型与 0 比较是非常常见的用法,没有浮点型或指针类型的潜在问题。
  • 对于非零值的判断,可以直接写为 if (a),而无需显式比较 a != 0

浮点类型(float, double

  • 浮点类型可以直接与 0 比较,但由于 浮点精度误差 的存在,直接比较结果可能会不准确。
  • 通常不推荐直接与 0 使用 ==!= 进行比较,而是使用一个小的容差值(epsilon)来进行近似比较。

指针类型与 0 比较

  • 在 C++ 中,0 是空指针常量,可用来表示一个空指针(nullptr 在 C++11 中引入,之前常用 0 表示空指针)。
  • 指针与 0 比较用于判断指针是否为空指针。

nullptr_t类型

  • 唯一的值std::nullptr_t 类型的唯一值是 nullptr(右值)
  • 隐式转换std::nullptr_t 类型的对象可以隐式转换为任意指针类型(如 int*char*void* 等),但不能转换为非指针类型(如 intfloat)。
  • 语义明确:它明确表示 "空指针" 的含义,而不是整数 0 或其他类型。

malloc、calloc、realloc的区别

#include <stdlib.h>
#include <stdio.h>

int main() {
    // malloc 示例
    int* malloc_arr = (int*)malloc(5 * sizeof(int)); // 分配未初始化内存
    if (malloc_arr) {
        for (int i = 0; i < 5; i++) malloc_arr[i] = i;
        free(malloc_arr);
    }

    // calloc 示例
    int* calloc_arr = (int*)calloc(5, sizeof(int)); // 分配并初始化为 0
    if (calloc_arr) {
        for (int i = 0; i < 5; i++) printf("%d ", calloc_arr[i]);
        free(calloc_arr);
    }

    // realloc 示例
    int* realloc_arr = (int*)malloc(3 * sizeof(int));
    if (realloc_arr) {
        realloc_arr = (int*)realloc(realloc_arr, 6 * sizeof(int)); // 调整大小
        free(realloc_arr);
    }

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值