STL容器
Posted 上进小青年
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STL容器相关的知识,希望对你有一定的参考价值。
啦啦啦,今天听啦高年级学长讲的STL容器啦,发现有好多东西还是有必要记载的,毕竟学长是身经百战的,他在参加各种比赛的时候积累的经验可不是一天两天就能学来的,那个可是炒鸡有价值的啊,啊啊啊啊啊
#include<iomanip>
#include<iostream> #include<string.h> using namespace std; int main() { char a[100], b[100]; cin >> b; strcpy(a, b); cout << a << ":::" << b << endl; strcat(a, b); cout << a << endl; char *q = strchr(a, \'a\');///在这里该函数返回\'a\'出现的首地址,当找不到‘a’时返回NULL,具体看下图 cout << q << endl; cout << strcmp(a, b) << ":::" << strcmp(b, a) << ":::" << strcmp(a,a) <<endl; int l = strlen(a); cout << l << endl; }
在网上查到过,在好多论文中提到过memset中存在某种机制,将会使得它比for的循环赋值快一些
全排列函数next_permutation();用于求算字符串或者数组的全排列,
**但是尤为要注意的一点是该函数只会返回从给定的字符串或者数组字典序之后的序列,也就是说当我们想要求出全排列的时候我们应该先为数组或者字符串排序
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int main() 5 { 6 string s="bca"; 7 sort(s.begin(),s.end()); 8 cout<<s<<endl; 9 while(next_permutation(s.begin(),s.end())) 10 { 11 cout<<s<<endl; 12 } 13 }
排序时的结果
未排序时的结果
没有第8行时的结果
排序int型数组
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int main() 5 { 6 int a[5]= {2,3,1}; 7 sort(a,a+3); 8 cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl; 9 while(next_permutation(a,a+3)) 10 { 11 cout<<a[0]<<" "<<a[1]<<" "<<a[2]<<endl; 12 } 13 }
在比赛中积累的经验得知,这个求全排列的函数比我们自己写的用dfs求的全排列要快
对于平时的时间要求较高的题目,我们会用到二分查找,但是对于边界我们却总是不能正确找到,这里有一个二分查找的函数,它的时间复杂度时log级别的
lower_bound(a,a+n,b);求该函数返回在a数组中b首次出现的地址
upper_bound(a,a+n,b);求该函数返回在a数组中b末次出现的地址
**要注意的一点是对于a数组在它传递给该函数的时候要严格遵守升序排列才能找到,因为这个函数时严格遵守二分查找的法则,否则就会报错
1 #include<iostream> 2 #include<algorithm> 3 using namespace std; 4 int main() 5 { 6 int a[]={3,2,2,1,0}; 7 cout << lower_bound(a,a+5,2)-a << endl; 8 cout << upper_bound(a,a+5,2)-a << endl; 9 }
对于string类型用sort排序方法
string s="abc";
sort(s.begin(),s.end());
以上是关于STL容器的主要内容,如果未能解决你的问题,请参考以下文章