ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

2021-03-13

2021-03-13 19:31:04  阅读:217  来源: 互联网

标签:03 13 string int s1 元素 2021 include stdio


#STL的简单应用–知识点`
1
#include<bit/stdc++.h>//万能的头文件,对C++大部分操作完全可以实现。
C++中的输入和输出有两种方式,

#include<bit/stdc++.h>
using namespace std;
int main()
{
sync_with_stdio(false);

一种是scanf和printf,(scanf与printf使用的头文件应是stdio.h而不是 iostream)
一种是cin和cout(效率相对较低)
在#include<bits/stdc++.h>这个万能头文件下,这两种方式是可以互换的
sync_with_stdio(false);//加快cin与cout‘的运行速度。

2string
//头文件
优点:
string的用法与数组不同,定义一个字符串类型的数组,需要标注内存空间,例如
char name[20];//这个用在已知字符长度,而用string只需要
string name;创建一个空字符串对象,实现得到可变长度的字符序列。
例1

`#include<bit/stdc++.h>
using namespace std;
int main()
{
sync_with_stdio(false);//
string s1,s;
cin>>s;
cout<<s<<endl;
string s2="l have read books";
s1=s2;
cout<<s1<<endl;
cout<<s1.size()<<endl;} `

学习了string的一些简单的应用,
s.size()返回的是s中的字符个数
还有赋值,连接,比较。
getline()函数
一般表达为getline(cin,line)
line//第二个参数,存放读入字符串的string对象。
函数作用:就是把cin(从其正读取想要的内容,然后存入后一个参数里)

#include<bit/stdc++.h>
using namespace std;
int main ()
{
string s1;
while(getline(cin,s1));//就是在程序中输入字符串(包含空格)存入s1中
if(!line.empty())//string中bool返回值是否为空
cout<<s1<<s1.size()<<endl;
	return 0;
}

while
用循环读取未知数量的string对象,用下标运算符访问string中指定位置的字符时,范围是0-s1.size()

3(stack)
先进后出,操作最顶端元素,再返回bool与查找元素(字符)个数时候的操作差不多
(s.top())//返回栈顶元素
(s.pop();)移除
(s.push(a))压入一个元素
就是对栈顶的元素进行操作

`#include<bit/stdc++.h>
using namespace std;
int main()
{
sync_with_stdio(false);
stack<int>a;//这是进行定义

4队列(queue)–先入先出-普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除
类似于栈的定义,queue<int(类型)>q;

#include<bit/stdc++.h>
using namespace std;
int main()
{
sync_with_stdio(false);
queue<int>q;//定义一个queue函数q
q.push(11);
q.push(22);
q.push(33);//压入三个值,就是从已有元素后面增加元素。
cout<<q.front() <<endl; //front();返回队列的第一个元素的值,这里只是返回.
//与之对应的是q.back;返回队列的最后一个元素的值.
}

5vector动态数组
定义:vectorv
这个函数由push_back(类型 a)压入的时候是由最尾端插入。
同样也是删除最尾端pop_back()

6sort函数(#include<bit/stdc++.h>)
定义#include(头文件)
(1)int a[n]={ }//n是已知的数
sort(begin,end);
sort(a,a+n);//a是指针名地址从头到尾进行排序,默认从小到大。
(2)sort(begin,end,cmp);//反向排列
(3)bool cmp(int a,int b)
return a>b;
如果cmp返回结果为假, 那么函数就会将他们互换位置;
如果cmp返回结果为真,就会保持原来位置不变。在这里也就是如果a>b=ture,那么返回a>b,
else得到t=b,b=a,a=t;互换位置

7优先队列(priority_queue)为队列的一个延伸
定义:priority_queueq
优先队列中,元素被赋予优先级。当访问元素时,具有最高优先级的元素最先删除这是与普通队列的区别,

8去重unique
iterstor unique(name1 begin,name1 end);
iterstor unique(name1 begin,name1 end,MyFunc);
//最后一个参数是判断元素是否相等。
去除数组(容器)相邻重复出现的元素;注意,这里是相邻。但并没有删除,只是把元素放在末尾
使用条件:去重是相邻间的元素,在进行去重前先进行排序,例如
sort()
由于返回的是容器末尾,所以如果想得到去重后的size,需要减去初始地址。
9scanf
s= unique(b + 1,b + n + 1)-(b + 1);
scanf()函数是格式化输入函数
scanf(“格式化字符串”,地址);

10 operator()
函数对象:定义了调用操作符()的类对象。当用该对象调用此操作符时,其表现形式如同普通函数调用一般

11set和multiset
根据特定的准则排列元素。
不同:set不允许元素重复。
定义:sets;//默认从小到大。

#include<bit/stdc++.h>
using namespace std;
int main()
{
sync_with_stdio(false);
set<int>s1;
s1.inset(11);
s1.inset(11);
s1.inset(11);//插入返回新元素位置
s1.inset(22);
s1.inset(33);
cout<<s1.erase(n)<<s1.cout(elem);//n可以是元素也可以是地址。元素时返回删除个数,位置时,无返回值。+返回元素elem的个数。
//s1.clear() 移除全部元素。
}

12map和multimap
定义:map<lei1,lei2>map_name;
map<string,int>m;//默认由小到大排列。
与前面的差不多.但是map的每一个元素都有两个,第一个元素是键值,另一个是实值。
区别:map不可以已有两个相同的键值,但是另一个可以。
m.lower_bound();//
m.upper_bound();
upper_bound 和 lower_bound;
(1)upper_bound(begin, end, value);
返回>value的元素的第一个位置。
(2)lower_bound(begin, end, value);
返回>=value的元素的第一个位置。

#include<bits/stdc++.h>
using namespace std;

int main(){
    sync_with_stdio(false); 
    int a[10] = {1,3,5,2,4,6,7,5,2,5};
    sort(a, a + 10);、、a就是首地址,
    for (int i = 0; i < 10; ++i) cout<<a[i];
    int s, e;
    s = lower_bound(a, a + 10, 5);
    e = upper_bound(a, a + 10, 5);
    cout<<e-s<<endl;//大于5的第一个值
 
    return 0;
}

感悟
#贪心算法
寻找最优解的问题,从局部到整体,
给定一个载重量为M的背包,考虑n个物品,其中第i个物品的重量 ,价值wi (1≤i≤n),要求把物品装满背包,且使背包内的物品价值最大。
怎么贪?
本来我们要用一个包收起最有价值的东西,空间是一定的,我们会想
1多装物品,每次挑轻的物品;
3选价值大的物品;
但是总会不尽人意,因为每样东西的价值是不一样的。在这个题中引进了性价比这个概念。
按性价比从高到底的顺序选取物品;

标签:03,13,string,int,s1,元素,2021,include,stdio
来源: https://blog.csdn.net/weixin_52467668/article/details/114714233

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有