STL
栈的简单应用:括号匹配
#include <bits/stdc++.h>
using namespace std;
bool check(string s){
stack <char> p;
p.push('#');
for(int i=0;i<s.size();i++){
char c=s[i];
if(c=='('||c=='[') p.push(c);
else if(c==')'){
if(p.top()!='(') return false;
else p.pop();
}
else if(c==']'){
if(p.top()!='[') return false;
else p.pop();
}
}
return (p.size()==1);//只剩‘#’
}
int main(){
string s;
while(cin>>s){
if(check(s)) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
vector的应用:邻接表
struct edge{
int from;
int to;
int value;
};
vector <edge> Map[N];
集合set
set只能通过迭代器(iterator)来访问
set<int> st;
for (set<int>::iterator it = st.begin(); it != st.end; it++) {
}
string类
可以使用 + 运算符对string 对象执行字符串的连接操作
可用 < , <= , != , >= , > 进行比较
求子串
//求stirng对象的子串
string s1 = "this is ok";
string s2 = s1.substr(2, 4);//s2="is i"
s2 = s1.substr(2);//s2="is is ok"
插入字符串
//插入字符串
string s1("Limitless"), s2("00");
s1.insert(2, "123");//s1="Li123mitless"
s1.insert(3, s2);//s1="Li10023mitless"
s1.insert(3, 5, 'X');//s1="Li1XXXXX0023mitless"
查找
//字符串的查找操作
s.find(str);//查找字符串str在当前字符串s中第一次出现的位置
s.find(str, pos);//查找字符串str在当前字符串中s的[pos,end]中第一次出现的位置
常用函数
sort(s.begin(), s.end());
next_permutation(s.begin(), s.end());
reverse(s.begin(), s.end());