主要来源于读《ACM程序设计》《c++标准程序库》时所做的笔记,和前一篇综合下基本ACM的基础就解决了
1.常用不易被注意的命令
windows linux
tasklist ps
taskkill /pis <> kill <>
直接运行 ./
acs<abd.in>abc.out ./abc<abc.in>abc.out //相当有用
echo 10|foo|bar echo 10|foo|bar
type abc.txt|more cat abc.txt|more //只有显示功能
2.vector<T> v
push_back()的效率远远高于insert erase push_front
sort(v.begin(),v.end());可以使用迭代器vector<T>::iterator,后面可以加上可省略的比较函数
reserse(v.begin(),v.end());
3.string
string s;
c++的string满足STL
s.replace(3,3,"ssss");
s.find("key")
reverse(s.begin(),s.end());
vector<string> //做个string数组
sscanf sprintf
sscanf(s,&int,&double);
sprintf(s,int,double);
ostringstream istringstream
ostringstream o; o<<int; s=o.str();
istringstream i(s); i>>int;
4.set//集合,主要是实现了红黑树的平衡二叉树
set<int> s;
注意,不要随便修改值,已修改就变位置,迭代器就不好用了
insert();
set<int>reverse_iterator rit;
for(rit=s.rbegin();rit!=s.reand();++rit){ }
erase();参数可以是 元素值 也可以是 迭代器
find(key);
set有可能需要自己写比较函数 set<int,cmp> s;
结构体或者类 可以直接把比较写在里面
class A{int a; int oprator <(const A& b){return a-b.a;}}
5.multiset//可以有重复元素的集合
基本和set一致
erase() 如果参数是 迭代器 则删除这个元素。如果参数是元素值,则删除所有这个值的元素
6.map
map<stirng,int> map;//可以添加第三个参数,设置比较函数,也可以在类中设置比较函数
m["Tom"]=2;
m["Jack"]=17;
m.erase("Tom");
可以方便用于 取余
7.multimap
基本和map一致
erase() 如果参数是 迭代器 则删除这个元素。如果参数是元素值,则删除所有这个值的元素
8.deque//分段数组
类似于vector,但是指针较麻烦,要智能指针,好处是向前向后插元素较快
9.list//双链表
push_front push_back insert remove pop_front pop_back erase()删除指定点 find()没找到的话返回end
l.uique()可以提出连续的重复元素,只保留一个
10.bitset
bitset<10000> b;
b.any() //返回是否存在1
b.none()//返回是否没有1
b.count()//返回1的个数
b.size()
b[pos]
b.set(pos)//把指定位设成1
b.set()//把所有位设成1
b.reset(pos)//把指定位设成0
b.reset()//把所有位设成0
b.flip(pos)//指定位取反
b.flip()//所有位取反
b.to_ulong()
cout<<b;
11.stack
push() top() pop()
12.queue
front()//返回队首 back() push()//插入队尾 pop()//消灭队首
13.priority_queue
priority_queue<int> pq //优先队列,可以定义cmp或者类的<
push top pop