ICPC第一周 浅学STL

handsomefkg 2022-03-20 23:38:42

一、

C++的字符串类型:string

标准库string类

它支持字符串对象的各种操作

要包含头文件<stirng>

1.getline()函数可以将完整的一行输入数据读入到字符串中,读到换行符为止,且换行符被丢弃,无论这一行中是否有空格。

方法:

getline(cin,字符串名称);

cin是输入流对象

2.s.empty()函数判断string对象是否为空,返回值是bool类型;

3.

<cstring>头文件中对字符数组的处理:

char a[10];

strlen(a)返回值是字符数组的长度。

strcpy(a,b) 将字符数组b复制到a中。

4.

获取string类型对象的长度:

s.size();

5.

比较string对象:

相等代表他们1⃣️长度相同2⃣️包含的字符相同。

可以用关系运算符比较两个字符串对象,大小按照字典顺序定义且区分大小写字母。

6.

下标运算符可以访问string对象中指定位置的字符:

string对象s的下标范围是从0到s.size()-1;

#include<bits/stdc++.h>
using namespace std;
int main(){
sync_with_stdio(false);
const string hexdigits=“0123456789ABCDEF”;
cout<<“enter a number between 0 and 15:”<<endl;
string::size_type n;
cin>>n;
if(n<hexdigits.size())
  cout<<“hex number is:”<<hexdigits[n]<<endl;
return 0;
}

7.

 

 

8.

9.

 

二、

另外我还知道一个小知识,写完int main()再在下一行写一个

sync_with_stdio(false);

可以加快cin>>的速度,在以后会非常实用。

 

 

三、

是一种先进后出的数据结构,只能操作最顶端元素。

头文件<stack>

stack<int>s;     建立一个栈s,其内部元素类型是int。

s.push(a);将元素a压进栈。

s.pop();将栈顶元素弹出(移除)。

s.top();查询栈顶元素。

s.size();查询s中的元素个数。

s.empty();查询是否为空,返回值是bool型;

四、

队列 queue

先进先出的数据结构。

queue<int>q;建立一个队列,内部元素类型是int。

q.push(a);  q.push(数据类型 a);

q.empty();

q.size();

q.pop();

q.front();查询队首元素

q.back();查询队尾元素

五、

向量 可变数组

vector

 

六、sort函数

包含在<algorithm>头文件中。

1.sort(num,num+5,cmp);

默认升序排列,a[0]到a[4]。

2.bool cmp(int a,int b>{

retrun a>b;

}//降序排列;

七、优先队列

头文件<queue>

定义:

priority_queue_<数据类型>变量名称;

priority_queue_<int>a;默认是最大顶堆;

 

 

八、去重unique

这个去重并非删除,是将重复的元素放到容器的末尾,返回值是去重之后的尾地址,

也可以说:返回值是指向最后一个元素的下一个元素的迭代器。

需要先进行排序,只能对有序数组。

1.unique(a,a+n);

对a数组的a[0]到a[n-1]去重

 

九、生成排列

头文件<algorithm>`

1.

bool next_permutation(begin,end);

改变区间内元素的排序,产生下一个排列。

2.

bool prev_permutation(begin,end);

产生前一个排列。

end为最后一个元素的下一个位置。

 

十、集合

头文件<set>

set和multiset会根据特定的排序准则,自动将元素排序,两者的不同在于multiset可以允许元素重复。

1.定义

set<int>ds;

2.插入元素

ds.insert(x);

如果这个元素已经存在,则什么都不干。

3.删除元素

ds.erase(x);

删除元素x,如果不存在,则什么都不干。

ds.erase(it);

删除元素所在地址为it的元素。

4.

ds.end();

返回集合中最后一个元素的下一个元素的地址。

5.

ds.find(x);

查询x在集合中的地址,如果这个数不存在,则返回ds.end()。

6.

ds.lower_bound(x);

查询不小于x的最小的书在集合中的地址,如果这个数不存在,则返回ds.end()。

ds.upper_bound(x);

查询大于x的最小的数在集合中的地址,如果这个数不存在,则返回ds.end()。

7.

ds.empty();

ds.size();

 

 

 

学习感悟:

这开始的部分理解起来比较简单,但是脱离实践的纸上谈兵让我还是不能如鱼得水的熟练运用。

 

这是正式开始学习ICPC的第一周,感觉还是没能很快的进入到准备比赛的状态,下个周我绝对拿出一个学习状态不同于今日的自己。

 

悟以往之不谏,知来者之可追。

 

 

 

 

 

 

 

 

 

 

...全文
60 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
ooolinux 2022-03-22
  • 打赏
  • 举报
回复

支持,推荐图形界面编程:https://blog.csdn.net/u010165006/article/details/122217326 多图、实例、书籍
————————————————————






65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧