当前位置: 首页 > news >正文

阿里云做网站/武汉本地seo

阿里云做网站,武汉本地seo,怎样做自己的 优惠卷网站,彩票网站建设制作✏️ 关于专栏:专栏用于记录prepare for the coding test. 文章目录 第一章 从零开始1.输入输出技巧常用输入输出加速 2.CSTL的使用unordered_map 和 unordered_set 3.多组输入的问题 第一章 从零开始 1.输入输出技巧 输入字符串数组 输入一行字符串带空格&#…

image-20250427210104860

✏️ 关于专栏:专栏用于记录prepare for the coding test.

文章目录

      • 第一章 从零开始
        • 1.输入输出技巧
          • 常用输入输出加速
        • 2.C++STL的使用
          • unordered_map 和 unordered_set
        • 3.多组输入的问题

第一章 从零开始

1.输入输出技巧

输入字符串数组

输入一行字符串带空格,使用scanf遇到空格会自动结束,使用gets不会结束。

#include<bits/stdc++.h>
using namespace std;
signed main(){string s; 	//int s[100][100];同理scanf("%s",s);	printf("%s",s);return 0;
}

getchar:读取输入缓冲区的下一个字符(通常就是那个遗留的回车​)。

字符的ASCII码—char字符和int值是可以相互转化的

printf("%d\n",'a');	//97
printf("%d\n",'A');	//65

关于换行符处理的一个eg~

//存储地图
/*** #####.####@##### ***/
//1.正确做法
#include<bits/stdc++.h>
using namespace std;
char grid[10][10];
signed main(){for(int i = 1;i <= 4;i++){for(int j = 1;j <= 4;j++){cin>>grid[i][j];}}for(int i = 1;i <= 4;i++){for(int j = 1;j <= 4;j++){cout<<grid[i][j];}cout<<endl;}return 0;
}#include<bits/stdc++.h>
using namespace std;
char grid[10][10];
signed main(){for(int i = 1;i <= 4;i++){scanf("%s",grid[i]+1); //代表此行的第1列(从第0列开始) }for(int i = 1;i <= 4;i++){for(int j = 1;j <= 4;j++){cout<<grid[i][j];}cout<<endl;}return 0;
}
//2.错误做法
#include<bits/stdc++.h>
using namespace std;
char grid[10][10];
signed main(){for(int i = 1;i <= 4;i++){for(int j = 1;j <= 4;j++){scanf("%c",&grid[i][j]);}}for(int i = 1;i <= 4;i++){for(int j = 1;j <= 4;j++){cout<<grid[i][j];}cout<<endl;}return 0;
}

小结:cin本身就会自动跳过空白符(空格、回车、Tab)

​ scanf是原样读取,不会跳过空白,会把回车读进变量

常用输入输出加速

在大数据量输入输出时,可以使用以下方法加速C++读写:

#include<bits/stdc++.h>
using namespace std;
signed main(){ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int n;cin >> n;cout << n << endl;return 0;
}
  • ios::sync_with_stdio(false):取消cin和scanf同步,加速cin
  • cin.tie(0):取消cin和cout绑定,加速cin
  • cout.tie(0):取消cout与cin的刷新绑定,加速cout
  • 注意:使用这些后,cin和scanf不要混用,统一用cin/cout。
2.C++STL的使用

sort()函数,依次传入三个参数,要排序区间的起点,要排序区间的终点+1,比较函数。比较函数可以不填,则默认从小到大排序。

#include<bits/stdc++.h>
using namespace std;
int a[105];
signed main(){int n;cin>>n;for(int i = 0;i < n;i++){cin>>a[i];}sort(a,&a[n]);//这里用sort(a,a+n);也是可以的for(int i = 0;i < n;i++){cout<<a[i]<<" ";}return 0;
}

从小到大的排序数组中

lower_bound(begin,end,num)函数:从数组的 begin 位置到 end-1 位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin, 得到找到数字在数组中的下标。

upper_bound(begin,end,num)函数:从数组的 begin 位置到 end-1 位置二分查找第一个大于 num的数字,找到返回该数字的地址,不存在则返回 end。通过返回的地址减去起始地址 begin, 得到找到数字在数组中的下标。

从大到小的排序数组中

lower_bound(begin,end,num,greater())函数:从数组的 begin 位置到 end-1 位置二分查找第一个小于或等于 num 的数字,找到返回该数字的地址,不存在则返回 end。通过返回的地址减去起始地址 begin,得到找到数字在数组中的下标。

upper_bound(begin,end,num,greater())函数:从数组的 begin 位置到 end-1 位置二分查找第一个小于 num 的数字,找到返回该数字的地址,不存在则返回 end。通过返回的地址减去起始地址 begin,得到找到数字在数组中的下标。

#include<bits/stdc++.h>
using namespace std;
int cmp(int a,int b){return a>b;
}
signed main(){int nums[6]={1,2,4,7,15,34};sort(nums,nums+6);int pos1=lower_bound(nums,nums+6,7) - nums;int pos2=upper_bound(nums,nums+6,7) - nums;//返回数组中第一个大于被查数的值cout<<pos1<<" "<<nums[pos1]<<endl;cout<<pos2<<" "<<nums[pos2]<<endl;sort(nums,nums+6,greater<int>());int pos3=lower_bound(nums,nums+6,7,greater<int>()) - nums;int pos4=upper_bound(nums,nums+6,7,greater<int>()) - nums;cout<<pos3<<" "<<nums[pos3]<<endl;cout<<pos4<<" "<<nums[pos4]<<endl;return 0;
}

string(虽然不属于,但有很多相似之处)

#include<bits/stdc++.h>
using namespace std;
signed main(){string s = "abcdefg";cout << s.length() << endl; //长度cout << s.substr(1,3) << endl; //从下标1开始取3个字符s.insert(2, "XYZ"); //在第2个位置插入字符串cout << s << endl;s.erase(2,3); //从第2个位置删除3个字符cout << s << endl;cout << s.find("de") << endl; //查找子串cout << (s == "abcdefg") << endl; //字符串比较reverse(s.begin(),s.end()); //字符串反转cout << s << endl;return 0;
}
方法作用
s.length()返回字符串长度
s.substr(pos, len)返回从pos开始长len的子串
s.insert(pos, str)在pos插入字符串
s.erase(pos, len)从pos开始删除len个字符
s.find(str)找到子串第一次出现的位置
reverse(s.begin(), s.end())字符串反转

pair

#include<bits/stdc++.h>
using namespace std;
signed main(){pair<int,string> p;p = {1,"apple"};cout<<p.first<<" "<<p.second<<endl;vector<pair<int,int>> vp;vp.push_back({2,3});vp.push_back({4,1});sort(vp.begin(), vp.end()); //pair默认按first排序,相同first按secondfor(auto pr : vp){cout<<pr.first<<" "<<pr.second<<endl;}return 0;
}

priority_queue

  • 大根堆
  • 小根堆
  • 自定义
#include<bits/stdc++.h>
using namespace std;
struct Node{int value;int priority;
};
struct cmp{bool operator()(Node a,Node b){return a.priority < b.priority;}
};
signed main(){priority_queue<int> maxHeap;//大根堆 maxHeap.push(1);maxHeap.push(2);maxHeap.push(3);while(!maxHeap.empty()){cout<<maxHeap.top()<<endl;maxHeap.pop();}priority_queue<int,vector<int>,greater<int>> minHeap;minHeap.push(1);minHeap.push(2);minHeap.push(3);while(!minHeap.empty()){cout<<minHeap.top()<<endl;minHeap.pop();}priority_queue<Node,vector<Node>,cmp> dmaxHeap;dmaxHeap.push({1,1});dmaxHeap.push({2,2});dmaxHeap.push({3,3});while(!dmaxHeap.empty()){cout<<dmaxHeap.top().value<<" "<<dmaxHeap.top().priority<<endl;dmaxHeap.pop();}return 0;
}

vector

动态数组,最常用容器之一。

  • 常用操作总结表:
操作语法
添加元素v.push_back(x)
删除末尾元素v.pop_back()
访问元素v[i]v.at(i)
插入元素v.insert(v.begin()+pos, x)
删除元素v.erase(v.begin()+pos)
大小v.size()
清空v.clear()
排序sort(v.begin(), v.end())
反转reverse(v.begin(), v.end())
#include<bits/stdc++.h>
using namespace std;
signed main(){vector<int> nums;for(int i = 1;i <= 10;i++){nums.push_back(i*i);}for(int i = 0;i < nums.size();i++){cout<<nums[i]<<" ";}cout<<endl;return 0;
}

queue

先进先出(FIFO)

#include<bits/stdc++.h>
using namespace std;
signed main(){queue<int>q;q.push(1);q.push(2);q.push(3);while(!q.empty()){cout<<q.front()<<endl;//cout<<q.back()<<endl;队列尾部元素 q.pop();} return 0;
}

stack

后进先出(LIFO)

#include<bits/stdc++.h>
using namespace std;
signed main(){stack<int>s;s.push(1);s.push(2);s.push(3);while(!s.empty()){cout<<s.top()<<endl;s.pop();} return 0;
}

map

键值对集合,自动按key升序排序

#include<bits/stdc++.h>
using namespace std;
signed main(){map<string,int> dict;dict["Tom"] = 1;dict["Jone"] = 2;dict["Mary"] = 1;if (dict.count("Mary")) {//查找 mapcout<<"Mary is in class "<<dict["Mary"]<<endl;}for(map<string,int>::iterator it = dict.begin();it!=dict.end();it++){cout<<it->first<<" "<<it->second<<endl;}dict.clear();return 0;
}

set

集合,自动去重且按升序排列

#include<bits/stdc++.h>
using namespace std;
signed main(){set<string> country;country.insert("China");country.insert("American");country.insert("France");set<string>::iterator it;for(it = country.begin();it != country.end();it++){cout<<*it<<" ";}cout<<endl;country.erase("American");country.erase("France");country.clear();return 0;
}
unordered_map 和 unordered_set

无序版的map和set,底层哈希表,查找效率更高(平均O(1)),但不保证元素顺序。

特别小结:

容器特点
vector动态数组
stack栈(后进先出)
queue队列(先进先出)
priority_queue优先队列(大/小根堆)
map有序映射(自动排序)
set有序去重集合
unordered_map无序哈希映射
unordered_set无序哈希集合
img
3.多组输入的问题

多组输入一定要注意初始化问题,数组和变量的初始化要放在 while 循环内,否则上一次的运算的结果会影响当前的结果。

#include<bits/stdc++.h>
using namespace std;
signed main(){int a,b;while(cin>>a>>b){cout<<a+b<<endl;}return 0;
}

http://www.whsansanxincailiao.cn/news/32035512.html

相关文章:

  • 相亲网站拉人做基金/关键词seo排名
  • 用php怎么做网站/成都网站关键词排名
  • 怎么做家政的网站/网站制作郑州
  • 泊头哪有哪家做网站做的号/快优吧seo优化
  • 郑州做网站排名/搜索引擎营销的主要方式有
  • 青岛做网站皆赴青岛博/陕西seo主管
  • 手机上做网站/千锋教育培训多少钱费用
  • 人大网站的建设/网络赚钱推广
  • 做纸贸易的好网站/竞价账户
  • 浙江电商网站建设销售/徐州百度推广公司
  • 中国最受欢迎的网站/seo用什么工具
  • vuejs 网站开发/免费海报模板网站
  • 对于网站建设提出建议/网站收录提交
  • 可以做文档赚钱的网站/最新的疫情情况
  • adobe做网站的软件/关键词优化一年的收费标准
  • 国外做旅游攻略的网站/seo关键词优化推荐
  • 哪家网站做的好/鄂州seo
  • 新网站如何做流量/网络推广官网首页
  • 公司网站设计与实现的英文文献/青岛网站建设与设计制作
  • 网站建设广告宣传/金华百度seo
  • 织梦怎么做中英文网站/百度下载并安装最新版
  • 网站被劫持/百度竞价推广方案范文
  • 长春市网站建设dbd3/百度号注册官网
  • 制作网站的程序/推广网络营销外包公司
  • jsp做网站框架/不受限制的搜索引擎
  • 公司设计一个网站/seo优化工作
  • 做网站工作/济南百度代理
  • 我的网站怎么转网页呢/厦门关键词优化平台
  • 规则网站建设/外链推广平台
  • heritrix做网站/网络销售平台排名