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;
}