刷题过程中,那些总也记不住的语法

2023-11-02 08:58
文章标签 语法 过程 刷题 记不住

本文主要是介绍刷题过程中,那些总也记不住的语法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这篇文章中的内容,只是采用我比较熟悉的方式进行记录,内容零散,格式混乱,请多包涵。

 

大致分了类:

一、与vector相关的

1、sort(不光用于vector)

(1)Sort函数有三个参数:(第三个参数可不写)

第一个是要排序的数组的起始地址。

第二个是结束的地址(最后一位要排序的地址)

第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。

sort(vect.begin(), vect.end(), less<int>() ); 默认从小到大排序

sort(vect.begin(), vect.end(), greater<int>() ); 从大到小排序

(2)对于sort快排第三个参数的处理方法:

  • 何时可以省略:只要有定义小于运算的都能省略,包括自己定义的类型有小于运算的。
  • 何时不能省略:没有定义小于运算的,或者想排序的方式和默认小于运算不同的时候。
  • 如果没有规定运算规则的话,需要自己写排序函数,不能省略。

(3)自定义排序时,sort中的比较函数cmp要声明为静态成员函数或全局函数,不能作为普通成员函数,否则会报错:invalid use of non-static member function。

    static bool cmp(Interval a, Interval b){if(a.start != b.start)return a.start<b.start;elsereturn a.end<b.end;}

 

2、把一个vector直接装到一个队列中

queue<ListNode *>q{lists};

 

3、把一个vector装到一个set中

classSolution {
public:boolcontainsDuplicate(vector<int>& nums) {return nums.size() >unordered_set<int>(nums.begin(),nums.end()).size();}
};

 

4、vector删除元素

  • vector.clear(); //移除容器的所有数据
  • vec.erase(beg,end);  //删除[beg,end)区间的数据,返回下一个数据的位置。
  • vec.erase(pos);    //删除pos位置的数据,返回下一个数据的位置。

 

5、vector插入元素

  iterator insert( iterator loc, val );       //在指定位置loc前插入值为val的元素,返回指向这个元素的迭代器
  void insert( iterator loc, num, val );  //在指定位置loc前插入num个值为val的元素
  void insert( iterator loc, input_iterator start, input_iterator end ); //在指定位置loc前插入区间[start, end)的所有元素

 

6、unique

class Solution {
public:bool containsDuplicate(vector<int>& nums) {sort(nums.begin(), nums.end());return unique(nums.begin(), nums.end())!=nums.end();}
};

 

二、与字符串相关的

7、字符串的常用函数

数字转字符串:to_string   字符串转数字stoi

 

8、

 

9、string 类有多个构造函数,用法示例如下:

string(nums[i], i+'0')

 

10、string的erase函数

 

11、find

IP.find('.') != string::npos

等价于IP.find('.') != -1

 

12、string. find_first_of   string. find_last_of

(1)size_type find_first_of( const basic_string& str, size_type pos = 0 ) const;

     寻找等于给定字符序列中字符之一的首个字符。搜索只考虑区间 [pos, size()) 。若区间中不存在字符,则返回-1 。

(2)size_type find_last_of( const basic_string& str, size_type pos = npos ) const;

    寻找等于给定字符序列中字符之一的最后字符。搜索只考虑区间 [0, pos] 。若区间中不存在这种字符,则返回-1。

class Solution {
public:string reverseVowels(string s) {int i=0, j=s.size()-1;while(i<j){i=s.find_first_of("aeiouAEIOU", i);j=s.find_last_of("aeiouAEIOU", j);if(i<j) swap(s[i++], s[j--]);}return s;}
};

 

三、与字符串流相关的

13、stringstream

class Solution {
public:bool wordPattern(string pattern, string str) {map<char, int> m1;map<string, int> m2;stringstream ss(str);string temp;for(int i=0; i<pattern.size(); ++i){ss>>temp;if(m1[pattern[i]]!=m2[temp])return false;m1[pattern[i]]=m2[temp]=i+1;}return !(ss>>temp);}
};

 

14、istringstream,ostringstream 449题

class Codec {
private:void serialize(TreeNode *root, ostringstream &out){if(root){out<<root->val<<' ';serialize(root->left, out);serialize(root->right, out);}else{out<<"# ";}}TreeNode * deserialize(istringstream &in){string temp;in>>temp;if(temp=="#")   return nullptr;TreeNode *root=new TreeNode(stoi(temp));root->left=deserialize(in);root->right=deserialize(in);return root;}public:// Encodes a tree to a single string.string serialize(TreeNode* root) {ostringstream out;serialize(root, out);return out.str();}// Decodes your encoded data to tree.TreeNode* deserialize(string data) {istringstream in(data);return deserialize(in);}
};

 

15、getline

getline()的原型:

  • 头文件:#include <string>
  • istream& getline ( istream &is , string &str , char delim );
  • 其中,istream &is 表示一个输入流,譬如cin;
  • string&str表示把从输入流读入的字符串存放在这个字符串中
  • char delim表示定界符,在不设置的情况下系统默认该字符为'\n',也就是回车换行符(遇到回车停止读入)。
class Solution {
public:string validIPAddress(string IP) {istringstream is(IP);if (IP.find('.') != string::npos){//IPv4//if (IP.find('.') != -1){作用一样的string s;int cnt1 = 0;while (getline(is, s, '.')){cnt1++;for (int i = 0; i<s.size(); ++i){if (i>2 || !(s[i] >= '0'&& s[i] <= '9')) return "Neither";}if (cnt1>4 || s.empty() || stoi(s)>255 || s.size()>1 && s[0] == '0' ) return "Neither";}if(cnt1==4 && IP.back() != '.') return "IPv4";}else{istringstream is(IP);string s;int cnt2 = 0;while (getline(is, s, ':')){cnt2++;for (int i = 0; i<s.size(); ++i){if (i>3 || !(s[i] >= '0'&& s[i] <= '9' || s[i] >= 'a' && s[i] <= 'f' || s[i] >= 'A' && s[i] <= 'F')) return "Neither";}if (cnt2>8 || s.empty()) return "Neither";}if(cnt2==8 && IP.back() != ':') return  "IPv6";}return "Neither";}
};

 

四、其他

16、自定义结构体的格式

//定义双向链表
struct DListNode{int key, val;DListNode *pre, *rear;DListNode(int x, int y):key(x), val(y), pre(nullptr), rear(nullptr){}
};

 

17、hypot(a,b)的返回值为double类型,相当于sqrt(a*a+b*b) 447题

hypot英文单词本身表示计算一直角三角形的斜边长度。

 

18、移位、按位与、按位或运算

class Solution {
public:vector<string> findRepeatedDnaSequences(string s) {vector<string> re;unordered_map<int, int>m;int i=0, t=0;while(i<9){t=(t<<3) | (s[i++] &7);}for(int i=9; i<s.size(); ++i){t= (t & 0x7ffffff)<<3 | (s[i] &7);//取出后27位,左移三位,加上当前字符的后三位m[t]++;if(m[t]==2){re.push_back(s.substr(i-9, 10));}}return re;}
};

 

19、优先队列的定义:

priority_queue<int>q;   //通过操作,按照元素从大到小的顺序出队

priority_queue<int, vector<int>, greater<int> >q;  //通过操作,按照元素从小到大的顺序出队

eg:priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>> >q;

这篇关于刷题过程中,那些总也记不住的语法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/329516

相关文章

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Mysql用户授权(GRANT)语法及示例解读

《Mysql用户授权(GRANT)语法及示例解读》:本文主要介绍Mysql用户授权(GRANT)语法及示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql用户授权(GRANT)语法授予用户权限语法GRANT语句中的<权限类型>的使用WITH GRANT

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java字符串操作技巧之语法、示例与应用场景分析

《Java字符串操作技巧之语法、示例与应用场景分析》在Java算法题和日常开发中,字符串处理是必备的核心技能,本文全面梳理Java中字符串的常用操作语法,结合代码示例、应用场景和避坑指南,可快速掌握字... 目录引言1. 基础操作1.1 创建字符串1.2 获取长度1.3 访问字符2. 字符串处理2.1 子字

PyInstaller打包selenium-wire过程中常见问题和解决指南

《PyInstaller打包selenium-wire过程中常见问题和解决指南》常用的打包工具PyInstaller能将Python项目打包成单个可执行文件,但也会因为兼容性问题和路径管理而出现各种运... 目录前言1. 背景2. 可能遇到的问题概述3. PyInstaller 打包步骤及参数配置4. 依赖

Python基础语法中defaultdict的使用小结

《Python基础语法中defaultdict的使用小结》Python的defaultdict是collections模块中提供的一种特殊的字典类型,它与普通的字典(dict)有着相似的功能,本文主要... 目录示例1示例2python的defaultdict是collections模块中提供的一种特殊的字

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤