vector
函数 | 功能 |
---|---|
v.at(i) | 安全访问i下标处元素 |
string
头文件
#include<string>
常用函数:
函数 | 功能 |
---|---|
s.push_back(char) | 尾插一个char型的字符 |
s.pop_back() | 尾删 |
s.erase(iter) | 删除迭代器iter位置的字符 |
s.size() | 返回字符串长度 |
s.find(x) | 返回s中x的索引,未找到则返回s.npos |
s.rfind(x) | 反向查找,返回索引 |
s.insert(pos,x) | 在pos位置插入string型的x |
s.erase(const_iterator position) | 删除指定iter处的单个字符,并返回下一个字符的iter |
to_string(x) | 将int、long等类型转为string型 |
s.find_first_of(x) | 返回x首次出现的位置 |
s.find_last_of(x) | 返回x最后一次出现的位置 |
s.swap(s1) | 交换两个string |
常用操作:
查找母串中所有指定子串的位置
str="sub1sub2sub3";
sub="sub";
while((auto pos=s.find(sub,pos))!=str.npos){
cout<<"pos="<<pos<<endl;
++pos;
}
erase操作
//删除指定位置的字符
iterator erase (iterator p);
//删除指定范围的字符串
iterator erase (iterator first, iterator last);//删除[first,last)
//删除指定长度的字符串
string& erase(size_t pos=0, size_t len = npos);
set
头文件
#include<set>
常用函数:
函数 | 功能 |
---|---|
insert() | 插入元素 |
s.count(x) | 对set,若集合 s 包含 x 则返回 true;对multiset,返回set中x的个数 |
s.erase(x) | 删除所有元素x |
s.erase(iter) | 删除iter指向的元素x |
s.find(x) | 返回一个指针,表示 x 的位置,若不存在 x 则返回 s.end() |
s.begin() | 返回set容器的第一个元素 |
s.end() | 返回set容器的最后一个元素 |
s.clear() | 删除set容器中的所有的元素 |
s.empty() | 判断set容器是否为空 |
s.max_size() | 返回set容器可能包含的元素最大个数 |
s.size() | 返回当前set容器中的元素个数 |
s.rbegin | 返回的值和end()相同 |
s.rend() | 返回的值和rbegin()相同 |
常用操作:
遍历set
//方法一
for ( set<int>::iterator it=s.begin();it!=s.end();it++ ){
int x=*it;
}
方法二
for ( auto ele:s ){
}
删除单个元素:
if (s.find(x)!=s.end()){
s.erase(s.find(x)); //删除x
}
删除区间内的元素
#include<iostream>
#include<set>
using namespace std;
int main()
{
set<int>s;
set<int>::iterator it;
for(int i=1;i<=10;++i)
s.insert(i);
s.erase(s.find(5),st.end());//删除元素5至set末尾之间的元素
for(auto it=s.begin();it!=s.end();++it)
cout<<*it<<endl;
return 0;
}
map
头文件
#include<map>
#include<unordered_map>
常用函数:
函数 | 功能 |
---|---|
m.find(x) | 查找元素x,返回迭代器,查找失败则返回尾迭代器 |
常用操作:
打印map
map插入元素后会自动按照key进行排序,因此打印的结果默认按照key升序排列
void print_map(map<int,int>& m){
for(auto iter=m.begin();iter!=m.end();++iter){
cout<<iter->first<<" "<<iter->second<<endl;
}
return;
}
map按照value排序
思路:algorithm里的sort无法直接对map排序,可以先把map的key和value放入vector中,然后用sort对vector排序,指定按照value排序。
#include<iostream>
#include<vecrtor>
#include<map>
using nameapce std;
bool cmp(pair<int,int> a, pair<int,int> b) {
return a.second < b.second;
}
int main()
{
vector<pair<int,int>> v;
// create map
map<int,int> mymap;
for(int i=0;i<5;++i){
mymap[i]=4-i;
}
for(auto iter=mymap.begin(); iter!=mymap.end(); ++iter) {
v.push_back(make_pair(iter->first, iter->second));//装进vector容器中
}
// sort by value
sort(v.begin(), v.end(), cmp);
// print sort result
for(auto iter=v.begin(); iter!=v.end(); ++iter) {
cout<<iter->first<<" "<<iter->second<<endl;
}
return 0;
}
pair
std::pair
// 定义
pair<int, double> p1; //使用默认构造函数
pair<int, double> p2(1, 2.4); //用给定值初始化
pair<int, double> p3(p2); //拷贝构造函数
p1 = make_pair(1, 1.2); //使用make_pair
//访问元素
cout << p1.first <<" "<< p1.second << endl;
stack
常用函数:
函数 | 功能 |
---|---|
s.size() | 返回栈中元素数目 |
s.empty() | 堆栈为空则返回真 |
s.top() | 返回栈顶元素 |
s.swap(s1) | 交换两个栈 |
s.push() | 进栈 |
s.pop() | 出栈 |
array
常用函数:
函数 | 功能 |
---|---|
arr.begin() | 返回首元素的迭代器 |
arr.end() | 返回尾元素的迭代器 |
arr.size() | 返回元素数量 |
arr.empty() | 返回容器是否为空 |
arr.at(n) | 返回位置n处元素的引用,会自动检查n是否有效 |
arr.front() | 返回非空容器中首元素的引用 |
arr.back() | 返回非空容器中尾元素的引用 |
arr.fill(x) | 把x赋值给容器中的所有元素 |
arr.swap(swap1) | 交换两个array,前提是它们具有相同的长度和类型 |
deque
常用函数:
函数 | 功能 |
---|---|
d.push_front(x) | 首部插入元素x |
d.pop_front() | 首部弹出元素x |
d.push_back(x) | 尾部插入元素x |
d.pop_back() | 尾部弹出元素 |
d.front() | 返回首元素 |
d.back() | 返回尾元素 |
d.insert(pos,x) | 在pos位置插入x元素的拷贝,返回新数据的位置 |
d.clear() | 移除所有元素 |
d.erase(pos) | 删除pos位置的数据,返回下一个元素的位置 |
d.erase(beg,end) | 删除[beg,end)区间的元素,返回下一个元素的位置 |
algorithm
头文件
#include<algorithm>
常用函数:
函数 | 功能 |
---|---|
find(iter1,iter2,x) | 查找指定区间的元素x,iter1表示查找区间起始元素的索引,iter2表示终止元素索引的下一个位置 |
sort(iter1,iter2,comp) | iter1和iter2同上,comp为可选的排序方法,不写则默认从小到大排序 |
count(iter1,iter2,x) | 统计容器中元素x出现的次数 |
reverse(iter1,iter2) | 容器元素反转 |
常用操作:
从大到小排序
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
bool cmp(int a,int b){
return a<b; //从小到大排序
};
int main()
{
vector<int> myVector{45,12,34,77,90,11,2,4,5,55}; //列表初始化
sort(myVector.begin(),myVector.end(),cmp); //从小到大排序
return 0;
}
交换两个任意的数据
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a ="source",b = "target";
swap(a,b);
return 0;
}
统计string中元素出现的个数
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string tmp="this is an example!";
int num = count(tmp.begin(),tmp.end(),'a');
return 0;
}
读取一行放入string
可能包含’\n’
#include<string>
#include<iostream>
using namespace std;
int main()
{
string s;
getline(cin,s);
return 0;
}
待续。。。
[1]:C++11 语法与 STL 容器详解(持续更新)
[2]: C++ array(STL array)容器用法详解
[3]: C++ deque的用法与示例
[4]: C++中string类型的erase()函数详解