cpp刷题常用数据结构

C# HttpClient 实战:3步绕过Cloudflare指纹拦截,获取完整网页内容 本文详细介绍了如何使用C# HttpClient绕过Cloudflare指纹拦截,获取完整网页内容的3步实战方案。通过完美复制浏览器请求头、智能管理Cookie容器以及处理动态挑战页面,开发者可以有效突破Cloudflare的反爬机制,适用于爬虫开发和数据采集项目。 阅读详情

模板

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
class Solution {
public:
    void func1(){
        
    }
};

int main(){
    Solution so;
    so.func1();
}

数组 vector

数组

int dp[100][2]={0};//定义一个数组,需要用具体的数字声明其长度

初始化

vector<int> nums={1,2,3};
vector<int> nums={};
vector<int> nums(n,m); // 长度是 n,默认值是 m,如果不给默认值,则默认值是0
vector<vector<int>> dp(n,vector<int>(m,0)); 一个 n 行 m 列二维数组,默认值是0

曾删改查,遍历,大小,是否为空

nums.insert(nums.begin()+1,3)//索引1初插入元素3
nums.push_back(3);// 最后插入元素3
nums.pop_back();//弹出最后一个
nums[1]=3;//索引1元素修改为3
if(find(nums.begin(),nums.end(),target)!=nums.end())cout<<"find";
for(auto c:nums){cout<<c;}//遍历
nums.size();//是无符号数,改成有符号(int)nums.size()
nums.empty();

第一个元素 nums.front(),最后一个元素 nums.back()
排序 sort(nums.begin(),nums.end())在原数组上排序,没有返回值
判断是否有序 is_sorted(nums.begin(),nums.end())
二维数组排序,数组 people[n][m],根据其第一个属性升序排列,当相同时,按照第二个属性降序排列

sort(people.begin(), people.end(), [](const vector<int>& a, const vector<int>& b) {
        return a[0] < b[0] || (a[0] == b[0] && a[1] > b[1]);
        });

找到最大值*max_element(dp.begin(),dp.end());

不太常用

将2个数字组合 make_pair,然后其第一个是 first,第二个是 second

pair<int,int> people;
people=make_pair(10,1);
cout<< people.first; //10
cout<< people.second;//1
//定义一个2维但是每个有2个属性的数组
vector<vector<pair<int,int>>> dp(n,vector<pair<int,int>>(n,make_pair(0,0)))// 定义一个 n*n 矩阵,每个元素有2个属性,其默认值是0

使用迭代器

 	vector<int>::iterator it1;//迭代器是指针的泛指,用来检查容器内元素并遍历容器元素
    vector<int>::iterator it2;
    it1=nums.begin();//nums.begin是向量的起始元素的迭代器,获取该值,用 *nums.begin()
    it2=nums.end()-1;//同理,如果是numd.end(),表示vector中最后一个元素的下一个,默认值为0
    cout<<*it2;

拷贝向量

    std::vector<int> vec{11,22,33,44,55};
    std::vector<int> copyInit(vec);
    vec[0]=999;//改变原vector的内容并不会修改拷贝后的vector的内容。

queue

单向队列,先进先出,可以获取第一个元素,最后一个元素,弹出第一个元素,判断是否为空,添加元素到末尾

基本用法

queue<int>q ;
q.pop(); //似乎没有返回值,只是删除第一个进来的元素,要确保里面有元素,否则会报错
q.back();// 确保有元素
q.front();// 确保有元素
q.empty();
q.push(1); //添加元素1

创建一个元素是pair的队列示例

//创建
    queue<pair<int,int>> points;// 创建了一个队列,队列中每个元素是一个pair
    //添加元素
    points.push({1,2});
    //删除元素,先进先出,所以先删除最先进来的
    points.pop();
    //获取队列中第一个元素(也就是最先进来的元素)
    auto [r,c]=points.front();
    points.back();//队列中的最后一个元素
    //获取队列长度
    points.size();

优先队列

//对于基础类型 默认是大顶堆
    priority_queue<int> a; 
    //等同于 priority_queue<int, vector<int>, less<int> > a;
    priority_queue<int, vector<int>, greater<int> > c;  //这样就是小顶堆
    priority_queue<string> c;// 大顶堆 ///cbd abcd abc

deque 双向队列

deque<int>d;//定义
d.push_back(1);//尾追加
d.push_back(2);
d.push_front(0);//放到最前面
for(auto x:d){cout<<x;}
d.pop_front();
d.pop_back();
d.front();
d.back();

stack

stack<int>stack1;
    //加入元素
    stack1.push(1);
    //删除元素
    stack1.pop();
    //取栈顶元素
    stack1.top();
    //获取大小
    stack1.size();

string char

字符 用单引号 char c='a';可以加减
字符串用双引号 string s="student"; 只能加法

 sub1=str1.substr(pos,length)
//定义字符串
   string str1="abc";  //必须用双引号
   str1.length();//获取字符串长度
   string str2="bc";
   str1+str2;//字符串之间可以相加,不可以减法
   char c1='a';//必须用单引号
   //字符可以加减
   char c2='b';
   int m1=c1-c2;//是根据ascii码中的顺序给出的结果
   int m2=c1+c2;//根据ascii码中的数字给出的结果
   char s=str1[0];//取一个字符
   //取子字符串
   sub1=str1.substr(pos,length);//pos表示位置索引,length表示子字符串长度
   // 增加,只能是字符
   str1.push_back('a');
   //获取字符串最后一个元素
   str1.back();
   //遍历
    string s1="abc";
    for(auto c:s1){
        cout<<c<<" ";
    }
   
   

将字符串转成 int

string s1="1"; //双引号是 string,单引号是 Char
int num1=stoi(s1); 

ListNode

定义

struct ListNode {
    int val;
    ListNode *next;
    ListNode(int x) : val(x), next(nullptr) {}
};

基本使用

//定义一个新的指针
ListNode *dumpy=new ListNode(0);
//定义一个指针指向某个指针
ListNode *cur=dumpy;
//获取指针的值
dumpy->val;
//获取下一个
dumpy->next;

TreeNode

定义

 struct TreeNode {
      int val;
      TreeNode *left;
      TreeNode *right;
      TreeNode() : val(0), left(nullptr), right(nullptr) {}
      TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
      TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
  };

常用用法

TreeNode * root;
    root->left;
    root->right;
    root->val;
//    定义一个queue,其元素是treenode节点
    queue<TreeNode*> p;
//    新建一个Node节点
    TreeNode* node=new TreeNode();
    //构建一个树
    node->val=1;
    TreeNode* node1=new TreeNode();
    TreeNode* node2=new TreeNode();
    node1->val=2;
    node2->val=3;
    node->left=node1;
    node->right=node2;

set 和unordered_set

set会自动排序,
unordered_set不会自动排序,其增删查平均复杂度是O(1),最坏是O(N)
unordered_set和set语法相同

# include <set>
set<int> res;
res.insert(1)//插入元素
res.erase(1)//删除元素1
if(res.find(1)!=res.end())//查找元素

将 vector 值复制给 unordered_setunordered_set<int>ret(nums1.begin(),nums1.end())
将unordered_set值复制给vectorvector<int>(result_set.begin(), result_set.end());

map和unordered_map

map是有序的,对有顺序要求的用这个
unordered_map是无序的,查找快

unordered_map

// 定义一个哈希map
    unordered_map<char ,int > hash;
    //添加元素
    hash['c']=1;
    hash.insert({'b',2});
    //清空
    hash.clear();
    // 删除元素
    hash.erase('c');//删除某个元素,传入参数key

定义一个哈希map

unordered_map<char ,int > hash={{ 5, "张大" },{ 6, "李五" }}

定义一个哈希table

    unordered_map<string, vector<string>> table = {
        {"start", {"start", "signed", "in_number", "end"}},
        {"signed", {"end", "end", "in_number", "end"}},
        {"in_number", {"end", "end", "in_number", "end"}},
        {"end", {"end", "end", "end", "end"}}
    };

查找,并打印其 value

 unordered_map<char ,int > hash;
# 方法一:
if( hash.find(key)!=hash.end()) cout<<"找到"<<hash[key];
# 方法二:
auto it =hash.find(target-nums[i]);  // 这里的 it是指针 
if(it!=hash.end()) cout<<it->second;

遍历

for(auto c:hash){
	cout<<c.first; // 打印 其 key
}

count 用法hash.count(key)>0
默认定义的哈希表 int 值是0

unordered_map <int,int> hash1;//存放 a,b 之和 以及 它的个数
for(auto c1:nums1){
	for(auto c2:nums2){
		++hash1[c1+c2]; //应该是默认是0
	}
}
AVL_Cruise_interface\Simulink联合仿真 分享了AVL_Cruise通过interface模块与Simulink进行联合仿真的过程 阅读详情

相关推荐

别再魔改LWIP了!用STM32CubeMX配置F407的TCP保活(KeepAlive)与自动重连

本文详细介绍了如何通过STM32CubeMX配置STM32F407的LWIP协议栈,实现TCP保活(KeepAlive)与自动重连功能,解决网络异常断开问题。文章提供了从基础环境配置到自动重连架构设计的完整指南,帮助开发者构建高可靠的网络连接机制,适用于工业物联网和嵌入式设备开发。

weixin_27038245的博客 234

C++之std::pair与vector<pair>用法(一百七十三)

本篇目的:理解std::pair与vector用法和区别std::pair来存储一对值。来存储一对值的集合。Audio工程师进阶系列。

Android系统攻城狮 2293

为什么我把「大模型Clouder认证:基于百炼平台构建智能体应用」作为大模型学习的第一站?从 0 到拿证全流程经验分享

【摘要】作为一个刚拿下「大模型 Clouder 认证:基于百炼平台构建智能体应用」的过来人,想在开头就和大家聊聊这个认证的特殊意义 —— 在企业加速 AI 落地的今天,能用低代码快速构建智能体应用,已经成为 AI 从业者的核心竞争力。无论是企业微信客服提效、钉钉机器人自动化办公,还是网站智能助手升级,这些场景化能力正是当下数字化转型的刚需。

davidkorhenn的博客 1527

【CPP】数据结构

1- Arrays。

weixin_38362786的博客 510

基于Dify Agent构建智能客服:攻克知识库查询、多轮对话、安全鉴权与人机协同

基于Dify Agent构建智能客服,并将知识库等核心能力工具化,再通过Chatflow进行流程编排,是一种强大且灵活的策略。它不仅解决了当前AI客服面临的诸多核心挑战,也为未来的功能扩展和智能化升级打下了坚实的基础。希望本文能为您在构建高效、智能的AI客服系统之路上提供有益的参考!dify实验室基于LLMOps平台-Dify的一站式学习平台。包含不限于:Dify工作流案例、DSL文件分享、模型接入、Dify交流讨论等各类资源分享。关注我,获取Dify相关资源(DSL、token、交流群等)。

同名公众号:dify实验室 3742

链家二手房信息爬取(内附完整代码)

链家二手房信息爬取1.简介2. 爬虫思路2.1 网页分析2.2 详情页分析2.3 不同页码的爬取2.4 解决链家只显示100页数据2.5 简单的反爬与进度条显示3. 总结 1.简介   最近帮同学爬取了链家在售二手房的信息,这是本人学习爬虫以来爬取数据最多的一次,就想着写个博客记录一下。   本次爬虫是利用python+jupyter notebook实现的,用到的第三方库如下: import pandas as pd # 数据存储 import requests # 网页内容获取 import re #

qq_46256922的博客 3万+

C++中用Vector和pair灵活的存储用Tinyxml读出的内容

由于公司需要,做工业互联涉及到xml的读出,本来读出之后使用简单的变量作为存储,但是变量的方式又不好做到数据的归类,就想到了用容器的方式进行存储,水平有限,请大家多指教。 #pragma once #include <string> #include <vector> struct RegularItemNode { const char *Name; std::string Description; int Code; int Length; }; struct Dev

XZshijian的博客 401

STM32驱动AD7779:双极性电源下8通道同步ADC的SPI配置与数据采集实战

本文详细介绍了在双极性电源供电下,使用STM32通过SPI接口驱动AD7779同步ADC芯片实现8通道高精度数据采集的实战经验。重点解析了电源设计、抗干扰处理、寄存器配置、SPI通信技巧及数据校准方法,帮助工程师解决工业测量中的同步采样与噪声控制难题。

e3f4g5的博客 370

C++ 往vector里插入pair

1.初始化 vector<pair<int,int>> res; res的声明:表示建立一个vector容器,容器里面放的是pair<int, int>类型的变量 2.添加元素 以下变量名res皆表示一个 vector<pair<int,int>>类型的容器。 1)利用push_back和强转类型进行添加元素。 res.push_back(pair<int,int>(10,50));//往容器的最后一个位置里插入(10, 50) 2

ganlanA的博客 5474

Authentication Assertion Tickets,SAP 系统到系统单点登录里的短命凭证

SAP 系统间的身份传递机制存在 Authentication Assertion Ticket 和 SAP Logon Ticket 两种易混淆的凭证。前者用于系统间短时身份委托(有效期2分钟,通过HTTP头传输),后者用于浏览器SSO(可配置有效期,通过Cookie传输)。Assertion Ticket依赖签发系统的数字签名和严格的时间同步,适用于ABAP/Java系统间的后台作业调用。现代SAP架构已转向OAuth 2.0等标准协议,但老系统中仍需注意两种票据的关键差异:传输方式、有效期、接收方限制

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 602

python 实现一个完整的基于Python的多视角三维重建系统,包含特征提取与匹配、相机位姿估计、三维重建、优化和可视化等功能

本文介绍了一个基于Python的多视角三维重建系统的实现,涵盖了特征提取与匹配、相机位姿估计、三维重建、优化和可视化等功能。首先,系统通过安装必要的库(如OpenCV、NumPy等)并加载图像数据,初始化相机参数。接着,系统使用SIFT、SURF或ORB算法提取图像特征点,并通过FLANN或BF方法进行特征匹配,应用Lowe's ratio test筛选优质匹配。该系统为后续的相机位姿估计和三维重建奠定了基础,能够从多视角图像中恢复三维场景结构。

huanghm88的专栏 614

C++ vector 中使用pair

#include &lt;iostream&gt; #include &lt;vector&gt; using namespace std; int main() {     // int64_t li64test;     // cout&lt;&lt;li64test&lt;&lt;endl;     std::vector&lt;pair&lt;int,int&gt; &gt; vec;  ...

chen199199的专栏 1941

华为OD机试双机位C卷-组装新的数组(Py/Java/C/C++/Js/Go)

华为OD机试(机考)双机位C卷 【组装新的数组】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试 - 组装新的数组。

qq_45776114的博客 1145

C++刷题常用数据结构和语法

C++系列

song430的博客 689

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

力扣刷题C++常用数据结构及函数记录

一、数据结构 1、待定 二、函数 1、数组初始化函数 int[] dp = new int[nums.length]; Arrays.fill(dp,1);

qq754261595的博客 838

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

leecode刷题C++ 常用数据结构操作

【代码】leecode刷题C++ 常用数据结构操作。

weixin_44064434的博客 341

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

用Java刷算法题的常用数据结构(C++转Java)

文章目录一:前言1:为何刷题从C++转java2:如何上手呢?二:输入1:输入一行数据带空格换行输入停止三:常用的数据结构1:数组 一:前言 1:为何刷题从C++转java 平时除了写项目的话,才用java,刷题的话就用C++,但是这样的话,对java的一些基本知识掌握不牢固,昨天jd的笔试当中 就有考察一些基础知识 虽然算法思路是最重要的,具体用什么语言实现主要 看自己对那门语言的数据结构用的溜即可 但是的话,实现是相同的 以后毕竟还是要吃java这份饭的,对一些数据结构熟悉一些,对于写一个工具类,.

qq_48508278的博客 4147

算法与数据结构 c++选手转java

单词的长度。

qq_45477639的博客 2496

牛客网Leetcode刷题模板 C++ 笔记

牛客网Leetcode刷题模板 C++ 笔记 1.模板&常见操作 2.数据结构 1.栈 2.队列 1.模板&常见操作 #include <bits/stdc++.h> using namespace std; int main(){ int n; cin>>n; while(n--){ xxxx return 0; } 2.数据结构 1.栈 stack<int> L; L.empty() 堆栈为空

编程不良人 678

系统化的算法学习计划(C++ 初学者合理利用刷题平台)

此博客为一份系统化的算法学习计划,涵盖理论讲解和配套练习,适用于C++语言。 内容包括: 基础数据结构和算法概念 经典算法(排序、搜索、动态规划等) 练习题目推荐,涵盖不同难度 进阶方向建议(如竞赛算法、工程实践)

h050210的博客 1411

蓝桥杯--C++常用刷题算法总结

这些是 C++ STL 中最常用的数据结构和算法接口,熟练掌握它们可以大幅提升编程效率!C++编程中,常用的算法接口函数的,基本用法的总结,用于算法的刷题。堆,栈,队列,大根堆,小根堆等等。

void_sk的博客 370

C++基本语法和刷题常用方法

熟悉最常使用的C语言语法 掌握C/C++程序如何使用gdb调试 会用C++新增的特性 堆,栈,链表 树 图 基本算法 动态规划 最常使用的C语言语法 获取pi的值:const double pi = acos(-1.0); C语言中的逻辑运算符都是短路运算符,一旦能够确定整个表达式的值,就不再继续计算 编程实现计算int类型数据的取值最大值和最小值:#include<cstdio&gt...

vicco的博客 1889

数据结构与算法总结——LeetCode刷题随笔

按照年初制定的学习计划,今年在在跟进自己感兴趣的方向外,我希望能够花一部分时间在巩固基础知识上,包括C++/Python,数据结构与算法、操作系统等。其中,数据结构与算法一直是我个人技术栈的一个短板,优先从此开始,我给自己定的学习思路主要是以LeetCode刷题为主线进行查漏补缺。另外,我在刷LeetCode的同时还刷了一遍B站左神的教程一周刷爆LeetCode,是一套很不错的刷题教程,推荐大家学习。从左往右的尝试模型,关注iii位置结尾,或者iii位置开头的情况,或者看iii联合i1i+1。

weixin_44580210的博客 2395

python刷题笔记怎么改_python 笔记(刷题常用函数)

抱着C++,Python两手都要抓的原则,又把python复习了一下,并且刷了一些题,发现有的笔试题用python刷起来真是爽,尤其是涉及字符串的题目。所以这里总结一下这两天常用的函数。对循环输入的字符串做处理:while True:try:x = raw_input()if(not x):breakexcept:breakstr():数字转字符串int():浮点数转int或整数字符串转int,i...

weixin_28672681的博客 118

3242:【例40.3】ISBN码(C++、python)

3242:【例40.3】ISBN码(C++、python)

青少年趣味编程 2677

刷Leetcode算法题目日志(C++)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 刷Leetcode算法题目日志 文章目录前言一、刚开始使用Leetcode遇到的问题 前言 最近刷些算法题目,思来想去还是觉得以博客的形式来记笔记挺不错。所以这篇博客就是我今后一两个月时间刷代码题的日志,内容会很随意。 用的OJ是Leetcode 一、刚开始使用Leetcode遇到的问题 leetcode不需要有cin和cout,也不需要有main函数,它唯一有的就是一个叫做**Solution的类**,类中有一个函数,返回值和

wck__yoyo的博客 2104
上一篇: 最长递增子序列
下一篇: 编辑距离 动态规划
your pencil
博客等级 码龄9年 2粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值