数据の进阶 - STL之丰
[by_041]
based on [ ACM模板-f_zyj v 2.1.pdf ]
标准算法库<algorithm>
这里主要记录不常用的哦ii(常用的比如
sort()
之类的就不写了)
//以<int>类型" "分隔地输出v中的所有元素
copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
//让v中的所有元素作为参数执行func_()函数
for_each(v.begin(),v.end(),func_);
//v的下一个字典序全排列,字典序最大返回false,否则返回true
next_permutation(v.begin(),v.end());
//从u下标m的元素开始覆盖上v的前n个元素
copy(v.begin(),v.begin()+n,u.begin()+m);
//返回最大元素的迭代器(iterator)
max_element(v.begin(),v.end());
注意事项
XXX::iterator it;
//如果it指向容器的.begin()则it--会炸
<pair>
pair<double, double> p;
cin >> p.first >> p.second;
<bitset>
const int MAXN = 32;
bitset<MAXN> bt;
bitset<MAXN> bt1(0xf);
bitset<MAXN> bt2(012);
bitset<MAXN> bt3("1010");
bitset<MAXN> bt4(s, pos, n);
bt.any()
bt.none()
bt.count()
bt.size()
bt.test(pos)
bt.set()
bt.set(pos)
bt.reset()
bt.reset(pos)
bt.flip()
bt.flip(pos)
bt[pos].flip()
bt.to_ulong()
os << bt
<set>、<multiset>
set<int>s;
s.begin(); //返回集合的第一个元素的迭代器
s.clear(); //清空集合
s.count(val); //返回val的个数
s.empty(); //返回集合是否为空
s.end(); //返回集合的结束迭代器
s.equal_range(val); //返回集合中与给定值相等的上下限迭代器
s.erase(val); //擦除val元素
s.find(val); //返回一个值为val的迭代器
s.get_allocator(); //返回集合的分配器
s.insert(val); //插入val元素
s.key_comp(); //返回一个元素之间比较的函数
s.lower_bound(); //返回指向大等于某值的第一个元素的迭代器
s.max_size(); //返回集合最多容纳元素的限值
s.rbegin(); //反向的头(最后一个元素)
s.rend(); //反向的尾(最前一个元素)
s.size(); //返回元素个数
s.swap(ss); //交换集合
s.upper_bound(val); //返回大于某个值的迭代器
s.value_comp(); //返回一个元素之间比较的函数
/*
set是自然有序的所以
最小值为:
(*s.begin());
最大值为:
set<int>operator it=s.end();
*(--it);
*/
向量<vector>
vector<int>v(size,value);//初始化为size个value,不写默认为0
s[i]
s.front();
s.back();
s.push_back(x);
s.size();
s.empty();
s.pop_back();
s.begin();
s.end();
s.insert(it, val);
s.insert(it, n, val);
s.insert(it, first, last);
s.erase(it);
s.erase(first, last);
s.reserve(n);
s.resize(n);
s.resize(n, val);
s.clear();
s.swap(v);
s.assign(first, last);
<string>
- 类比<vector>
<stack>
stack<int> s;
s.push(x);
s.pop();
s.top();
s.empty();
s.size();
<queue>
queue<int> q;
q.push(x);
q.pop();
q.front();
q.back();
q.empty();
q.size();
priority_queue<int> q;
priority_queue<pair<int, int> > qq;
priority_queue<int, vector<int>, greater<int> > qqq;
q.empty();
q.size();
q.pop();
q.top();
q.push(item);
集合<map>
map<key_,val_>mp;
map<key_,val_,less<key_>>mp; //构建小堆
map<key_,val_,greater<key_>>mp; //构建大堆
mp.size() //返回集合中匀速个数
mp.swap(mq) //交换集合mp和集合mq
mp.count(key); //返回键值key的元素个数(map中不存在相同元素,所以返回值只能是1或0)
mp.find(key); //返回键值key的元素,没有则返回map.end()(类型是map的iterator)
map<val_,key_>pm; //想要从val找key,只能这样以val为键key为值来建map类
mp.insert(pair<key_,val_>(key,val));//插入键值对(key,val)
mp.lower_bound(key); //返回指向键大于等于key的第一个元素
mp.upper_bound(key); //返回指向键大于key的第一个元素
mp.key_comp(); //返回一个用于元素间值比较的函数(类型是map的value_compare)
mp.value_comp(); //返回一个用于比较元素间的值的函数(类型是map的value_compare)
for(map<key_,val_>::iterator mi=mp.begin();mi!=mp.end();mi++) //正序遍历
cout<<mi->first<<" , "<<mi->second<<endl;
for(map<key_,val_>::reverse_iterator mj=mp.rbegin();mj!=mp.rend();mj++) //倒序遍历
cout<<mj->first<<" , "<<mj->second<<endl;
<algorithm>
A: adjacent_find
B: binary_search
C: copy / copy_backward / count / count_if
E: equal / equal_range
F: fill / fill_n / find / find_end / find_first_of / find_if / for_each
G: generate / generate_n
I: includes / inplace_merge / iter_swap
L: lexicographical_compare / lower_bound
M: make_heap / max / max_element / merge / min / min_element / mismatch
N: next_permutation / nth_element
P: partial_sort / partial_sort_copy / partition / pop_heap / prev_permutation / push_heap
S: search / search_n / set_difference / set_intersection / set_symmetric_difference / set_union
/ sort / sort_heap / stable_partition / stable_sort / swap / swap_ranges
T: transform
U: unique / unique_copy / upper_boun