STL(Standard Template Library,标准模版库)主要由容器(container)、迭代器(iterator)和算法(algorithm)三部分组成,其中封装了数据结构中的大部分内容。
STL中sort函数:直接使用sort迭代器进行排序。
#include<iostream>
#include<algorithm>using namespace std;
int main(){
int a[]={1,9,-5,0,9,45,2};
sort(a,a+7);
for(int i=0;i<7;i++){
cout<<a[i]<<endl;
}
return 0;
}#include<iostream>
#include<algorithm>using namespace std;
int main(){
string s="452155641321789";
sort(s.begin(),s.end());
cout<<s<<endl;
return 0;
}
int main(){
string s="452155641321789";
sort(s.begin(),s.end());
cout<<s<<endl;
s.erase(s.begin()); //清楚掉字符串首字母
cout<<s<<endl;
s.erase(--s.end()); //清除掉字符串最后一个字符,s.end指向最后一个字符的后一个,所以最后一个字符必须是--s.end
cout<<s<<endl;s=s.substr(2,3);
cout<<s<<endl; //取字符串中下表为2的字符后3个
return 0;
}
STL中获取一行字符:+=对字符串会转化为ASC码从而参与运算
#include<iostream>
using namespace std;int main(){
string a;
getline(cin,a); //
cout<<a<<endl;
return 0;
}
*************************************************************************************************************************************************
接着更,刚才碰到一篇比较好玩的帖子:https://www.cnblogs.com/ztz11/p/9296584.html
set(特点:插入后元素自动从小到大排序)
set< int > ::iterator it;//迭代器,可以指向同类型的集合
q.find(k);//其中一个元素k的地址
q.count(k);//k的个数
q.erase(k);//删除所有值为k的元素
q.erase(it);删除it指向的地址和元素
#include <bits/stdc++.h> using namespace std; int main() { multiset<int> q; multiset<int>::iterator it; for(int i=0;i<15;i+=3){ q.insert(i); } for(it=q.begin();it!=q.end();it++){ cout<<*it<<endl; } //**************查询相同的个数****************// cout<<(int)q.count(5); cout<<"结束"<<endl; //**************删除所有5****************// q.erase((5)); for(it=q.begin();it!=q.end();it++){ cout<<*it<<endl; } it=q.end(); q.erase(--it); it=q.lower_bound(9);cout<<*it<<endl; it=q.upper_bound(9);cout<<*it<<endl; return 0; }
Vector:
sort(q.begin(),q.end())//对vector里的元素进行排序
q.erase(unique(q.begin(),q.end()),q.end()); //截取重复的元素
q.insert(q.begin()+i,a);//在第i+1个元素前插入a
q.erase(q.begin()+i,q.begin()+j);//删除区间[i,j)内元素 (区间从0开始)
#include <iostream>
#include <bits/stdc++.h>
using namespace std;vector<int>v;
int main()
{
for(int i=1;i<15;i+=3){
v.push_back(i);
}
v.push_back(2);v.push_back(5);v.push_back(2);
for(int i=0;i<v.size();i++){
cout<<v[i]<<endl;
}
cout<<"排序**************************"<<endl;
sort(v.begin(),v.end());
for(int i=0;i<v.size();i++){
cout<<v[i]<<endl;
}
cout<<"删除重复项**************************"<<endl;
v.erase(unique(v.begin(),v.end()),v.end());
for(int i=0;i<v.size();i++){
cout<<v[i]<<endl;
}
cout<<"在第i+1位置插入3**************************"<<endl;
v.insert(v.begin()+1,3);
for(int i=0;i<v.size();i++){
cout<<v[i]<<endl;
}
cout<<"删除区间(0,3)上的所有元素**************************"<<endl;
v.erase(v.begin()+0,v.begin()+3);
for(int i=0;i<v.size();i++){
cout<<v[i]<<endl;
}
return 0;}
优先队列在上述链接中博主讲的很详细
Stack栈
常用操作:插入删除取栈顶,栈较为常用简单不多解释。
#include <bits/stdc++.h>
using namespace std;
int main(){
stack<int>s;
s.push(1);
s.push(2);
s.push(3);
s.push(4);
while(!s.empty()){
cout<<s.size()<<endl;
int k=s.top();
cout<<k<<endl;
s.pop();
}
return 0;
}
普通队列queue
先进先出,队尾增加,队首删除
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main(){
queue<int>q,q1;
for(int i=0;i<10;i++){
q.push(i);
}
for(int i=9;i<19;i++){
q1.push(i);
}
cout<<q.front()<<" "<<q.back()<<endl;
cout<<q.empty()<<" "<<q.size()<<endl;
q.swap(q1); //交换两个队列中的所有元素
cout<<"q1:"<<q1.front()<<" "<<"q:"<<q.front()<<endl;
}
map:
map的基本操作函数:
C++ maps是一种关联式容器,包含“关键字/值”对
begin() 返回指向map头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
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的函数
#include <bits/stdc++.h>#include <map>using namespace std;int main(){map<int,string>stu;stu.insert(pair<int,string>(1,"zhangsan"));stu.insert(pair<int,string>(2,"lisi"));stu.insert(pair<int,string>(3,"wangwu"));map<int,string>::iterator it;for(it=stu.begin();it!=stu.end();it++){cout<<it->first<<" "<<it->second<<endl;}it=stu.find(3);if(it!=stu.end()) cout<<it->second<<endl;else cout<<"do not find"<<endl;cout<<stu.count(2)<<endl;;return 0;}
************************************************************************************************************************************************更于2.16,有时间继续更
参考:这几位大佬:
https://blog.csdn.net/u013550000/article/details/80521509
https://blog.csdn.net/sinat_40872274/article/details/81149852