LeetCode 刷题基础Ⅰ -- 基础语法

c++ 基础语法,LeetCode 刷题用

  • 学习网站
    • 一、顺序结构
      • 基本数据类型
        • ① 整型 int
        • ② 长整型 long
        • ③ 浮点型 double
        • ④类型转换
      • 输入输出
        • ① getchar 吸收回车符
        • ② 数学函数
        • ③ 最大值的定义
    • 二、选择结构
      • ① switch
    • 三、数组
      • ① 初始化
      • ② 输入
      • ③ 方法
    • 四、结构体
      • ① 自定义结构体
      • ②自定义cmp
    • 五、vector
    • 六、set (有序)
    • 6.5、unordered_set (无序有 find方法)
    • 七、string
      • ① 基础
      • ② 查找
      • ③ 增删
    • 八、map
      • ① 基础
      • ② 对键和值的排序
    • 九、queue
    • 十、priority_queue
      • ① 基础
      • ② 自定义比较方式 1
      • ③ 自定义比较方式 2
      • ④ pair
    • 十一、stack
    • 十二、pair

学习网站

晴问算法训练营

一、顺序结构

基本数据类型

① 整型 int

范围是从−231到231−1(即从-21474836482147483647),简单估算可以认为是绝对值在2∗109以内。

② 长整型 long

范围是从−263到263−1,简单估算可以认为是绝对值在9∗1018以内。

③ 浮点型 double

输出格式为: “%m.nf”

其中 m 表示要输出这个数的宽度,包括小数点,如果实际数值的宽度大于m,则以实际的数据宽度为准,如果实际数值宽度小于m,那么默认右对齐,前面补空格。

n 表示小数点后面数据的位数。

image-20240922100220381

double 另一种输出格式为: %mf (不管小数点后面的)

m表示要输出这个数的宽度,包括小数点,如果实际数值的宽度大于 m,则以实际的数据宽度为准,如果实际数值宽度小于m,那么默认右对齐,前面补空格

注意:对于浮点型变量,小数点后默认有6位小数。

image-20240922100513100

对于四舍五入问题:

image-20240922100659078

④类型转换
int a, b;
double ans = (double)a / b;double d = 5.5;
int i = static_cast<int>(d);  // i = 5

输入输出

① getchar 吸收回车符

image-20240922101306955

② 数学函数

数学函数都在cmath头文件下,以下是本题涉及的常见数学函数,它们都接收浮点型,返回的也是浮点型

  1. fabs(a)a的绝对值

  2. floor(a)a的向下取整

  3. ceil(a)a的向上取整

  4. round(a)a的四舍五入(实际是四舍六入五成双)

  5. pow(a, b)ab次方,其中b也可以是浮点型

  6. sqrt(a)a的算术平方根(即开根号)

  7. log(a)a的以自然对数e为底的对数

// max 3
int main() {int a, b, c;cin >> a >> b >> c;cout << max({a, b, c});return 0;
}
③ 最大值的定义
Max = --1e9;
Min = 1e9;

二、选择结构

① switch

image-20240922101857060

三、数组

① 初始化

int num[1000] = {0};
int a[100][100];  //可以
int a[1000][1000];   // 不行,程序会崩溃,用vectorvector<vector<int> > A;	//正确的定义方式,后面的尖括号前要加上空格
vector<vector<int>> A;	//c++11之前这样定义是错误的,c++11之后支持这种定义方式int a[100];
memset(a, 0, sizeof(a));fill(a, a + n, k);int n = 3, m = 5, k, a[3][5];
fill(&a[0][0], &a[0][0] + n * m, k);

② 输入

// 输入整行 1
const int MAX_LEN = 51;
char str[MAXN];
cin.getline(str, MAXN_LEN);// 输入整行 2
string st;
getline(cin,st);

cin.getline函数在输入整行字符串的时候是以换行符\n为结束判断标志,并且在结束时会把这个\n给舍弃掉。因此我们在使用cin.getline输入一行字符串之后,再次使用cin.getline即可输入下一行字符串。

③ 方法

//二分查找数组中第一个大于等于某个数的位置
auto bound = lower_bound(sums.begin(), sums.end(), target);  //sum

四、结构体

① 自定义结构体

// 单链表
struct ListNode {int val;ListNode *next;ListNode() : val(0), next(nullptr) {}ListNode(int x) : val(x), next(nullptr) {}ListNode(int x, ListNode *next) : val(x), next(next) {}
};ListNode* pre = new ListNode(0,head);
ListNode* p = new ListNode();

②自定义cmp

//自定义cmp
struct Node{int x,y;Node(int x,int y): x(x),y(y) {}
};
bool cmp(Node a,Node b){if(a.x!=b.x){return a.x<b.x;}else{return a.y<b.y;}
}
int main(){sort(a,a+n,cmp);
}

五、vector

可变长度的数组。无find函数

// 定义、初始化
vector<int> vi;
vector<int> v(n, k);       // n 指长度, k 指每个元素的值
vector<int> v(n);          // n 指长度,每个单元初始化为 0
vector<int> v[n];          // 定义了一个长度为 n 的数组,数组的每个元素都是一个 vector 类型的变量。// 压入压出
vi.push_back(m);
vi.pop_back();// 输出
for(int i = 0; i < vi.size(); i++){cout<<vi[i];
}// 清空
vi.clear();// 插入到第 k 个位置,或删除第 k 个位置
vi.insert(vi.begin() + k, x);  
vi.erase(vi.begin() + k);// 排序 sort
sort(ans.begin(),ans.end());// 二维
vector<vevtor<int>> ans;
vector<int> v;
v.push_back(k);
....
ans.push_back(v);
ans[0].push_back(k);

六、set (有序)

set:可变长度,从小到大自动排序,唯一,有count()、find()

// 定义、初始化
set<int> s;
// 压入压出
s.insert(x);// 输出
for (set<int>::iterator it = s.begin(); it != s.end(); it++) {cout<<*it;
}
// 清空
s.clear();// 查找,与删除指定元素
set<int>::iterator it = s.find(k);
if(it != s.end()){s.erase(it);
}// 删除第 k 个位置
s.erase(k);

6.5、unordered_set (无序有 find方法)

弥补 vector 的无 find 不足

// 查找
unordered_set<ListNode *> visited;
ListNode *temp = headA;
visited.insert(temp)      //插入为insert 
visited.count(temp)     //  元素存在于容器中,则此函数返回1,否则返回0。visited.find(x) != visited.end()

七、string

① 基础

// 定义
string s;// 输入输出
cin>>s;      
getline(cin,s);      // 输入整行cout<<s;// 拼接
string s1,s2,s3;
s3 = s1 + s2;// 比较
看字典序的// 清空
s.clear();// 获取从s的下标从 k 开始、长度为 len 的子串
s2 = s.substr(k,len);//s1的下标从k开始、长度为len的子串替换为另一字符串s2,赋值s3;
s3 = s1.replace(k,len,s2);

② 查找

// 断s2 是否是 s1 的子串, 如果是的话,输出 s2 第一次在 s1 中出现的起始位置;如果不是,那么输出-1。
int pos = s1.find(s2);//从下标position位置处开始查 str
find(str,position)  //找到目标字符的位置
string s = "hello world!";
cout << s.find("e") << endl;  //输出结果:1//未找到目标字符
string s = "hello world!";
if (s.find("a") == s.npos) {cout << "not found" << endl;  //输出结果:not found
}//查找 ‘a’ 的个数int num = count(s.begin(),s.end(),'a');

③ 增删

// 插入到第 k 个位置,或删除
s.insert(vi.begin() + k, c);  
s.erase(vi.begin() + k);erase(pos,n);  //删除从pos开始的n个字符,比如erase(0,1)就是删除第一个字符
erase(position);  //删除position处的一个字符(position是个string类型的迭代器)
erase(first,last);  //删除从first到last之间的字符(first和last都是迭代器)

八、map

① 基础

// 定义、初始化
map<char, int> mp;     // <key, value> , 任意类型// 输入
mp[c] = x;// 输出
for (map<char, int>::iterator it = mp.begin(); it != mp.end(); it++) {cout << it -> first << " " << it -> second << endl;
}// 清空
mp.clear();// 查找键
if (mp.find(c) != mp.end()) {cout << mp[c];
}// 删除键
mp.erase(c);

② 对键和值的排序

// map 实现对 键key 排序
class MyCompare {
public:bool operator()(int v1, int v2) const {return v1 > v2;}
};void test01() {//默认从小到大排序//利用仿函数实现从大到小排序map<int, int, MyCompare> m;m.insert(make_pair(1, 10));m.insert(make_pair(2, 30));m.insert(make_pair(3, 50));for (map<int, int, MyCompare>::iterator it = m.begin(); it != m.end(); it++) {cout << "key:" << it->first << " value:" << it->second << endl;}
}// map 实现对 值 排序
class Solution {
private:typedef pair<string, int> PAIR;static bool cmp_val(const PAIR& left, const PAIR& right) {return left.second > right.second;}public:vector<int> topKFrequent(vector<int>& nums, int k) {map<string, int> mp;for (int i = 0; i < nums.size(); i++) {   // 记录数组元素和出现的次数mp[to_string(nums[i])]++;}vector<PAIR> cnt(mp.begin(), mp.end());   // sort一下sort(cnt.begin(), cnt.end(), cmp_val);vector<int> ans;for (int i = 0; i < k; ++i) {             // 输出前 k 个int x = atoi(cnt[i].first.c_str());ans.push_back(x);}return ans;}
};

九、queue

// 定义、初始化
queue<int> q;// 压入压出
q.push(k);
q.pop();// 输出 队首和队尾
cout<<q.front()<<" "<<q.back();// 清空,和判空
vi.clear();
if(q.empty())

十、priority_queue

① 基础

// 定义、初始化
priority_queue<int> q;   //默认值越大优先级约高, 递减
priority_queue<int, vector<int>, greater<int> > q1;  // 递增// 压入压出
q.push(x); q.pop()// // 输出 队首
cout << q.top();// 清空,和判空
vi.clear();
if(q.empty())

② 自定义比较方式 1

// 结构体 // 在结构体Fruit内部重载 < 操作符,对两个 Fruit 变量 f1 与 f2,// 当 f1.price > f2.price 时认为 f1 < f2成立;
struct Fruit {string name;int price;Fruit(string _name, int _price) {name = _name;price = _price;}friend bool operator < (Fruit f1,Fruit f2) {return f1.price > f2.price;}
};int main() {priority_queue<Fruit> q;for (int i = 0; i < n; i++) {cin >> name >> price;q.push(Fruit(name, price));}Fruit topFruit = q.top();cout << topFruit.name << " " << topFruit.price;return 0;
}

③ 自定义比较方式 2

struct fruit
{string name;int price;
};struct myComparison
{bool operator () (fruit f1,fruit f2){return f1.price > f2.price;}
};//此时优先队列的定义应该如下
priority_queue<fruit,vector<fruit>,myComparison> q;

④ pair

//pair
priority_queue<pair<int, int> > a;      //默认对值即 a.second 进行排序
pair<int, int> b(1, 2);
pair<int, int> c(1, 3);
pair<int, int> d(2, 5);
a.push(d);
a.push(c);
a.push(b);
while (!a.empty()) 
{cout << a.top().first << ' ' << a.top().second << '\n';a.pop();
}
//输出结果为:
2 5
1 3
1 2

十一、stack

// 定义、初始化
stack<int> s;// 压入压出
s.push(x); s.pop();// 输出 栈顶
s.top();

十二、pair

// 定义、初始化
string str; int k;
pair<string, int> p = make_pair(str, k);// 输出
cout << p.first << " " << p.second;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1544735.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

UE5地图白屏/过曝/非常亮の解决方法

今天遇到一个问题 , 新建项目 , 打开虚幻第三人称地图的默认关卡 , 发现白屏 , 啥也看不见 猜测可能是虚幻编辑器的bug , 造成白屏的原因应该是场景过曝了 记录一下解决方案 第一种解决方法 找到场景中的 后期处理体积 (PostProcessVolume) 直接删掉 或者找到 细节面板中 -…

【Transformers基础入门篇5】基础组件之Datasets

文章目录 一、简介二、Datasets基本使用2.1 加载在线数据集&#xff08;load_dataset&#xff09;2.2 加载数据集某一项任务&#xff08;load_dataset&#xff09;2.3 按照数据集划分进行加载&#xff08;load_dataset&#xff09;2.4 查看数据集&#xff08;index and slice&a…

数据库课程 CMU15-445 2023 Fall Project-2 Extendible Hash Index

0 实验结果 tips:完成项目的前提不需要一定看视频 1 数据结构&#xff1a;扩展哈希 解释下这张图&#xff1a; 图中header的最大深度2&#xff0c;directory最大深度2&#xff0c;桶的容量2。 最开始的时候只有一个header。 插入第一个数据&#xff0c;假设这个数据对应的哈希…

洛汗2保姆级辅助教程攻略:VMOS云手机辅助升级打怪!

在《洛汗2》中&#xff0c;玩家将进入一个充满魔幻色彩的西方世界&#xff0c;体验多种族文明的兴衰与冒险。为了更好地享受这款由普雷威&#xff08;Playwith&#xff09;开发的角色扮演动作手游&#xff0c;使用VMOS云手机将是一个明智的选择。VMOS云手机专为游戏打造了定制版…

基于SSM的“在线CRM管理系统”的设计与实现(源码+数据库+文档+开题报告)

基于SSM的“在线CRM管理系统”的设计与实现&#xff08;源码数据库文档开题报告) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 总体功能模块图 登录页面 后台管理页面 产品信息页面 客…

JSP(Java Server Pages)基础使用二

简单练习在jsp页面上输出出乘法口诀表 既然大家都是来看这种代码的人了&#xff0c;那么这种输出乘法口诀表的这种简单算法肯定是难不住大家了&#xff0c;所以这次主要是来说jsp的使用格式问题。 <%--Created by IntelliJ IDEA.User: ***Date: 2024/7/18Time: 11:26To ch…

consul注册中心与容器自动发现实战

consul简介 Consul 是 HashiCorp 公司推出的开源工具&#xff0c;用于实现分布式系统的服务发现与配置。内置了服务注册与发现框 架、分布一致性协议实现、健康检查、Key/Value 存储、多数据中心方案&#xff0c;不再需要依赖其它工具&#xff08;比如 ZooKeeper 等&#xff0…

拾色器的取色的演示

前言 今天&#xff0c;有一个新新的程序员问我&#xff0c;如何确定图片中我们需要选定的颜色范围。一开始&#xff0c;我感到对这个问题很不屑。后来&#xff0c;想了想&#xff0c;还是对她说&#xff0c;你可以参考一下“拾色器”。 后来&#xff0c;我想关于拾色器&#…

动态规划11,完全背包模板

NC309 完全背包 问题一&#xff1a;求这个背包至多能装多大价值的物品&#xff1f; 状态表示&#xff1a;经验题目要求 dp[i][j] 表示 从前i个物品中挑选&#xff0c;总体积不超过j&#xff0c;所有选法中&#xff0c;能选出来的最大价值。 状态转移方程 根据最后一步的状态&a…

C语言 typedef - C语言零基础入门教程

目录 一.typedef 简介 二.typedef 实战 1.typedef 定义基本数据变量 2.typedef 定义结构体 A.常规定义结构体B.typedef 定义结构体C.结构体使用 typedef 和不使用 typedef 区别 3.typedef 定义函数指针 三.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础…

【2024W33】肖恩技术周刊(第 11 期):猴哥,我好急啊!

周刊内容: 对一周内阅读的资讯或技术内容精品&#xff08;个人向&#xff09;进行总结&#xff0c;分类大致包含“业界资讯”、“技术博客”、“开源项目”和“工具分享”等。为减少阅读负担提高记忆留存率&#xff0c;每类下内容数一般不超过3条。 更新时间: 星期天 历史收录:…

YOLOv9改进 | 特征融合篇,YOLOv9添加iAFF(多尺度通道注意力模块),二次创新RepNCSPELAN4结构,提升小目标检测能力

摘要 特征融合,即来自不同层或分支的特征的组合,是现代网络架构中无处不在的一部分。虽然它通常通过简单的操作(如求和或拼接)来实现,但这种方式可能并不是最佳选择。在这项工作中,提出了一种统一且通用的方案,即注意力特征融合(Attentional Feature Fusion),适用于…

C++ std::any升级为SafeAny

std::any测试 #include <any>class A { public:int8_t a; };int main(int argc, char* argv[]) {std::any num((int8_t)42);auto a std::any_cast<A>(num);return 0; }异常&#xff1a; 0x00007FFA9385CD29 处(位于 test.exe 中)有未经处理的异常: Microsoft C 异…

网络威慑战略带来的影响

文章目录 前言一、网络威慑的出现1、人工智能带来的机遇二、网络空间的威慑困境1、威慑概念的提出2、网络威慑的限度3、人类对网络威胁的认知变化4、网络空间的脆弱性总结前言 网络威慑是国家为应对网络空间风险和威胁而采取的战略。冷战时期核威慑路径难以有效复制至网络空间…

AI大模型行业应用:企业如何走出一条智能化蜕变之路?

随着chatGPT的横空问世&#xff0c;我们对于人工智能在日常生活中的应用场景逐渐了解&#xff0c;无论是搜索、问答、文生图还是文生视频都出现了很多创意&#xff0c;甚至AI还可以做诗&#xff0c;输入一条指令&#xff0c;就可以让它当场赋诗一首。人工智能的发展&#xff0c…

五种方式帮你提升独立站销售额

想要提升独立站利润&#xff0c;一种方式就是降低你的单个购买用户成本&#xff0c;购买用户一方面是来源于广告引流&#xff0c;另一方面是自然流量和老用户复购&#xff0c;但许多新的独立站后者来源都是非常少的&#xff0c;比较依赖广告引流&#xff0c;当我们广告的单个用…

Splunk、Snort在入侵检测中的应用

前期准备 splunk环境验证 splunk相关命令 查看服务端采集了哪些客户端的日志&#xff1a; ./bin/splunk list deploy-clients Deployment client: CF787A85-1BF8-4460-9FA9-469FEEB95BCD applications: {_server_app_39.30: {action: Install, archive: /home/splunk/var/ru…

ChatGPT 诞生663天后,奥特曼罕见发表预言长文力推超级智能:时间不多了,还有不会使用chatgpt4请看文章开头?

还不知道怎么订阅chatgpt4.0和最新的大模型&#xff0c;可以看这里 &#xff1a;WildCard官方平台订阅chatgpt 今天&#xff0c;OpenAI 公司 CEO 山姆奥特曼在一篇题为《智能时代》的最新个人博文中&#xff0c;概述了自己对于 AI 驱动的技术进步与全球繁荣未来的愿景。这篇文…

用Swift实现验证回文字符串

如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后&#xff0c;短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s&#xff0c;如果它是 回文串 &#xff0c;返回 true &#xff1b;否则&#…

深度学习500问——Chapter14:超参数调整(3)

文章目录 14.5 如何改善GAN的性能 14.6 AutoML 14.6.1 什么是AutoML 14.6.2 自动化超参数搜索方法有哪些 14.6.3 什么是神经网络架构搜索&#xff08;NAS&#xff09; 14.6.4 NASNet的设计策略 14.6.5 网络设计中&#xff0c;为什么卷积核设计尺寸都是奇数 14.6.6 网络设计中&a…