【王道机试笔记】algorithm库/string库

algorithm库的常用函数

max(x,y) min(x,y) 参数可以是浮点数

abs(x) x必须是整数 如果x是浮点数则要用math头文件下的fabs(x)

swap(x,y) 交换x和y

sort(首元素地址(必填),尾元素地址的下一个地址(必填),比较函数(非必填)) 例如sort(v.begin(),v.end())
比较函数:

bool cmp(node a,node b) // 结构体的比较函数 
{
	if(a.x!=b.x)
	{
		return a.x > b.x;
	}
	else
	{
		return a.y < b.y;
	}
}

reverse(it,it2) it和it2可以是数组指针,也可以是容器的迭代器 注意的是翻转范围为:[it,it2)。

lower_bound(first,last,value)、upper_bound(first,last,value),他们都要在一个有序数组或有序容器中使用,lower_bound在[first,last)中找第一个值大于等于value的元素的位置,upper_bound在[first,last)中找第一个值大于value的元素的位置,所以返回的是数组的指针或者是容器的迭代器,当然只要减去了首地址得到的也就是目标元素的下标了。

fill() 与memset不同,fill赋值可以是数组类型对应范围中的任意值,因为string.h头文件中的memset中是按字节来赋值,因此往往只能赋值0或者-1而且速度比fill速度快。

	float a[5] = {0.1,0.7,3.2,4.6,7.0};
	for(int i=0;i<5;i++)
		cout << a[i] << " ";
	cout << endl;
	cout << upper_bound(a,a+5,3) - a << endl;
	reverse(a,a+5);
	for(int i=0;i<5;i++)
		cout << a[i] << " ";
	cout << endl;
	fill(a,a+5,3);
	for(int i=0;i<5;i++)
		cout << a[i] << " ";
	return 0;

next_permutation() 给出一个序列在全排列中的下一个序列

	int box[3]={1,2,3};
	do{
    	for(int i=0;i<3;++i)
        	cout << box[i] << ' ';
    		cout << endl;
		}while(next_permutation(box,box+3));	
	return 0;

string库的常用函数

string的定义及初始化
string s1 = "hello"; //初始化字符串
string s2 ("world"); //另一种初始化 
string s3;   //初始化字符串,空字符串
string s4(5, 'a'); //s4由连续5个a组成,即s4="aaaaa";
string s5(s1,2,3); //从s1的2位置的字符开始,连续3个字符赋值给s5,即s5="llo";
string s6(s1, 1); //从s1的2位置的字符开始,将后续的所有字符赋值给s6,即s6="ello";

一整行读入,可以使用getline():

string str;
getline(cin, str);
cout << str << endl;

重载的运算符

	s1 = s2;
    s1 += s2;
    s1 = s2 + s3;
    s1 == s2;
    s1 = "s" + s2; //正确
    s1 = "s" + "s"; //错误,加号两边至少要有一个string类型的对象
    s1 = "s" + s2 + "s" + "s"; //正确
遍历string

遍历string中的元素时,我们可以使用类似C中的数组形式访问,如s1[1],也可以使用STL特有的迭代器访问:

在这里插入图片描述

string::iterator it;
for (it = s1.begin(); it != s1.end(); it++){
    cout << *it << endl;
}

cout << *(s1.begin()); //正确,即访问s1[0]
cout << *(s1.end()); //错误,s1.end()指向了空
插入insert()
string s1 = "hello";
s1.insert(1,"ins"); //从s1的1位置开始,插入"ins"字符串,即s1="hinsello";
s1.insert(1, "ins", 2);//从s1的1位置开始,插入"ins"字符串的前2个字符,即s1="hinello";
s1.insert(1, "ins", 1, 2);//从s1的1位置开始,插入"ins"字符串的从1位置开始的2个字符,即s1="hnsello";
删除erase()
iterator erase(iterator first, iterator last);//删除[first,last)之间的所有字符,返回删除后迭代器的位置
iterator erase(iterator it);//删除it指向的字符,返回删除后迭代器的位置
string &erase(int pos = 0, int n = npos);//删除pos开始的n个字符,返回修改后的字符串
查找find()
cout << s.find("aa", 0) << endl; //返回的是子串位置。第二个参数是查找的起始位置,如果找不到,就返回string::npos
if (s.find("aa1", 0) == string::npos)
{
    cout << "找不到该子串!" << endl;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值