【总结】AYIT-2021 609暑假集训STL专题训练

AYIT-2021 609暑假集训STL专题训练

从此习题集的题中所学以及补充:

1.C++ 的输入输出:

头文件:<iostream >

cin语句的一般格式为:
cin>>变量1>>变量2>>……>>变量n;

cout语句的一般格式为:
cout<<表达式1<<表达式2<<……<<表达式n;

若要输出一定小数位数的浮点数需要:
增加头文件<iomanip> 以及
cout<<setiosflags(ios::fixed)<<setprecision(n);
n为要保留的小数位数

getline()
用法:接收一个字符串,可以接收空格并输出,需包含“#include<string>”
用法类似于gets()

2.map容器的简单使用

头文件<map>
定义方法:
map<变量类型1,变量类型2> 变量名;
变量类型1和变量类型2可以不同
变量类型1为 关键字(key)
变量类型2为 该关键字的值(value)

常用数组形式插入值,如:
map<int,int> m;
m[1]=2;

常用清空操作:
m.clear();

map的基本操作函数:

C++ maps是一种关联式容器,包含“关键字/值”对
begin()         返回指向map头部的迭代器
clear()        删除所有元素
count()         返回指定元素出现的次数, (帮助评论区理解: 因为key值不会重复,所以只能是1 or 0)
empty()         如果map为空则返回true
end()           返回指向map末尾的迭代器
equal_range()   返回特殊条目的迭代器对
erase()         删除一个元素
find()          查找一个元素
get_allocator() 返回map的配置器
insert()        插入元素
key_comp()      返回比较元素key的函数
lower_bound()   返回键值>=给定元素的第一个位置
max_size()      返回可以容纳的最大元素个数
rbegin()        返回一个指向map尾部的逆向迭代器
rend()          返回一个指向map头部的逆向迭代器
size()          返回map中元素的个数
swap()           交换两个map
upper_bound()    返回键值>给定元素的第一个位置
value_comp()     返回比较元素value的函数

3.set容器的简单使用

头文件<set>
定义方法:
set<变量类型> 变量名;
常用插入方式:
set<int> s;
s.insert(与定义相同的类型数值,此处为int);

注意:
1、set中的元素都是排好序的
2、set集合中没有重复的元素

set的基本操作函数:

begin()			返回set容器第一个元素的迭代器
end()			返回一个指向当前set末尾元素的下一位置的迭代器.
clear()			删除set容器中的所有的元素
empty()			判断set容器是否为空
max_size()		返回set容器可能包含的元素最大个数
size()			返回当前set容器中的元素个数
rbegin()		返回的值和end()相同
rend()			返回的值和begin()相同

4.vector容器的简单使用

头文件<vector>
定义方法:
vector<变量类型> 变量名;

vector的基本操作函数:

vector<int> a,b;

a.assign(4,2); 		a含有4个值为2的元素
a.back();			返回a的最后一个元素
a.front();			返回a的第一个元素
a[i];				返回a的第i元素,当且仅当a存在
a.clear();			清空a中的元素
a.empty();			判断a是否为空,空则返回true,非空则返回false
a.pop_back();		删除a向量的最后一个元素
a.push_back(5);		在a的最后一个向量后插入一个元素,其值为5
a.size();			返回a中元素的个数
a.capacity();		返回a在内存中总共可以容纳的元素个数
a.resize(10);		将a的现有元素个数调整至10个,多则删,少则补,其值随机
a.resize(10,2);		将a的现有元素个数调整至10个,多则删,少则补,其值为2
a.reserve(100);		将a的容量扩充至100,
a.swap(b);			b为向量,将a中的元素和b中的元素整体交换
a==b;				b为向量,向量的比较操作还有 != >= > <= <
a.erase(a.begin()+1,a.begin()+3);	删除a中第一个(从第0个算起)到第二个元素,也就是说删除的元素从a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)结束
a.assign(b.begin(),b.begin()+3);	b为向量,将b的0-2个元素赋值给向量a
a.insert(a.begin()+1,5);			在a的第一个元素(从第0个算起)位置插入数值5,
a.insert(a.begin()+1,3,5);			在a的第一个元素(从第0个算起)位置插入3个数,其值都为5
a.insert(a.begin()+1,b+3,b+6);		b为数组,在a的第一个元素(从第0个元素算起)的位置插入b的第三个元素到第5个元素(不包括b+6sort(a.begin(),a.end());			排序a

5.lower_bound( )和upper_bound( )的简单用法

重要前提:在从小到大的排序数组中

要求结果的地址==lower_bound(起始地址,结束地址,要找的值)-起始地址;

要求结果的地址==upper_bound(起始地址,结束地址,要找的值)-起始地址;

两者区别:
lower_bound:返回数组中第一个大于或等于被查数的值的地址
upper_bound:返回数组中第一个大于被查数的值的地址

6.string的简单用法

定义方法:
string 变量名;

此次练习集用到的相关函数:
string a,b;
char c[N];

find:
a.find(b);		在字符串a中寻找子字符串b,若未找到返回-1

assign:
a.assign(b,int start,int n);	把字符串b中从start开始的n个字符串赋给当前字符串a

string与char[]的相互转换:

string转char[]for(int i=0;i<a.length();i++)
	    c[i]=a[i];
	c[i]='\0'; 		//这一步比较重要

char[]转string:
	a=c;

string的基本操作函数:
string &operator=(const string &s);		把字符串s赋给当前字符串
string &assign(const char *s);			用c类型字符串s赋值
string &assign(const char *s,int n);	用c字符串s开始的n个字符赋值
string &assign(const string &s);		把字符串s赋给当前字符串
string &assign(int n,char c);			用n个字符c赋值给当前字符串
string &assign(const string &s,int start,int n);			把字符串s中从start开始的n个字符赋给当前字符串
string &assign(const_iterator first,const_itertor last);	把first和last迭代器之间的部分赋给字符串

7.迭代器的简单用法

类似于C语言的指针
例如:
	map<int,int> mm;
	map<int,int>::iterator it;		//要与所指对象类型一致
	for(it=mm.begin();it!=mm.end();it++)
		if((*it).second>1)
			sum++;

其他:
各个容器的find函数: 变量名.find(要找的值) 若是未找到相应值则会返回与 变量名.end() 相等的值

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值