LeetCode中的代码如何在本地编译器编译成功

文章初心

  • 笔者是应届生,现在的面试都不仅是核心代码模式,很多公司开始考察ACM模式,而在leetcode刷题时,都是核心代码模式,我相信很多同学像我一样,就没怎么接触过ACM模式,假如没接触ACM模式,面试中,很可能惊慌失措,接下来我将简单的介绍一下在编译器编译代码。

头文件

ACM模式首先就是自己写头文件,以下是经常要用到的头文件。

  • #include< cstdio >
    在C++中拥有在C语言里一样的语法,像输入输出。

  • #include< cstring >
    包含很多字符串函数,如复制、比较是否相等、字符串连接。

  • #include< iostream >
    输入输出流,包括输出格式的控制

  • #include< cstdlib >
    在C++中拥有在C语言里一样的语法,像开辟空间释放空间函数calloc、malloc,realloc和free;随机数rand。

  • #include< bitset >
    相当于一个多位二进制数,八位一字节,支持基本的位运算操作。

  • #include< cmath >
    数学函数,和C语言一样,有绝对值函数、开平方函数、求幂方函数等等。

  • #include< algorithm >
    算法头文件,包括很多常用函数,像find_if、for_each、sort、partial_sort。

  • #include< string >
    stl容器,有初始化、拼接、赋值、查找、替换、比较、子串、插入和删除操作。

  • #include< vector >
    stl容器,动态数组(可变数组),也叫单口容器,有初始化、常用赋值操作、存取、插入、删除、大小操作。

  • #include< stack >
    栈容器,先进后出,栈不能遍历,不支持随机存取,只能通过top从栈顶获取和删除元素,不提供迭代器。常用API有构造函数,赋值操作,数据存取操作和大小操作。

  • #include< list >
    链表容器
    链表是由一系列的结点组成,结点包含两个域,一个数据域,一个指针域。
    链表内存是非连续的,添加删除元素,时间复杂度都是常数项,不需要移动元素,比数组添加删除效率高。链表只有在需要的时候才分配内存。链表 只要拿到第一个结点,相当于拿到整个链表。链表需要额外的空间保存结点关系 前驱后继。常用API有构造函数,数据元素插入删除操作,大小操作,赋值操作,数据存取和反转排列顺序。

  • #include< deque >
    双口容器,支持随机存取。所谓双向开口,意思就是可以在头尾两端分别做元素的插入和删除操作。双端插入和删除元素效率高。指定位置插入也会导致数据元素移动,降低效率。可随机存取,效率高.。常用API有构造函数,赋值操作,大小操作,双端插入删除操作,数据存取。

  • #include< set >
    二叉树容器
    所有元素会根据元素的值自动进行排序。set是以RB-tree(红黑树,平衡二叉树的一种)为底层机制,其查找效率非常好。set容器中不允许重复元素,multiset允许重复元素。常用API有构造函数,赋值操作,大小操作,插入删除操作,查找操作。

  • #include< map >
    map相对于set区别,map具有键值和实值,所有元素根据键值自动排序,pair的第一元素被称为键值,第二元素被称为实值,map也是以红黑树为底层实现机制的。常用API有构造函数,赋值操作,大小操作,插入删除操作,查找操作。

  • #include < bits/stdc++.h >
    万能头文件,包含了目前c++所包含的所有头文件。可替换所有头文件。

main() 函数

main()函数里调用class类的调用经常出错,经过本人经验和其它博主的总结为以下:
经常用到的vector容器中

	int arr[] = {1,3,-1,-3,5,3,6,7}; //先定义数组
	vector<int> nums(arr, arr + sizeof(arr) / sizeof(int)); //通过数组的首地址,再定义vector
	Solution solution; //创建一个类,再通过类来调用函数

举例说明

在这里插入图片描述
本地编译器代码

#include<iostream>
#include<vector>
#include<queue>
#include<deque>

using namespace std;

class Solution {
	public:
    vector<int> maxSlidingWindow(vector<int>& nums, int k) {
        vector<int> res;
        deque<int> q;
        for (int i = 0; i < nums.size(); i++) { 
            while (q.size() && q.front() <= i - k) q.pop_front(); //将窗口的最前面的元素弹出 
            while (q.size() && nums[q.back()] <= nums[i]) q.pop_back(); //将队列底部小于遍历的元素弹出 
            q.push_back(i); //插入该元素 
            if (i >= k - 1) res.push_back(nums[q.front()]); //将最后的元素插入到队列中 
        }
        return res; //返回结果数组 
    }
};

int main () {
	int k = 3;
	int arr[] = {1,3,-1,-3,5,3,6,7};
	vector<int> nums(arr, arr + sizeof(arr) / sizeof(int));
	Solution solution;
	vector<int> res = solution.maxSlidingWindow(nums,  k); //将vector<int> 写成int,初始化类型错误,导致编译出错 
	for (int i = 0; i < res.size(); i++) {
	cout<<res[i]<<" ";
}
	return 0;
}

Dev-C++返回结果
在这里插入图片描述

总结

笔者在main()函数里,将vector 写成int,初始化类型错误,导致编译出错 ,一开始还以为自己后面的参数传错了, 没想到的是最前面的定义返回值类型定义错误,导致花了很久时间才找到错误,值得注意的是,以后我们写代码的时候,一定不要着急,先检查定义数据类型,再看参数类型,谢谢大家的观看。

  • 6
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值