【C++STL】数据の进阶 - STL之丰

数据の进阶 - STL之丰

[by_041]

based on [ ACM模板-f_zyj v 2.1.pdf ]

标准算法库

这里主要记录不常用的哦ii(常用的比如sort()之类的就不写了)

//以类型" "分隔地输出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<double, double> p;
cin >> p.first >> p.second;

二进制

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<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());
    最大值为:
    		setoperator it=s.end();
    		*(--it);
*/

向量

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);

字符串

  • 类比,加额外常用字符串操作

stack<int> s;
s.push(x);
s.pop();
s.top();
s.empty();
s.size();

各种队列

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);

deque<int> dq;
dq.push_back(elem);//在容器尾部添加一个数据
dq.push_front(elem);//在容器头部插入一个数据
dq.pop_back();//删除容器最后一个数据
dq.pop_front();//删除容器第一个数据
dq.at(idx);//返回索引idx所指的数据,如果idx越界,抛出out_of_range。
dq[idx];//返回索引idx所指的数据,如果idx越界,不抛出异常,直接出错。
dq.front();//返回第一个数据。
dq.back();//返回最后一个数据
dq.insert(pos,elem);//在pos位置插入一个elem元素的拷贝,返回新数据的位置。
dq.insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值。
dq.insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。
dq.clear();//移除容器的所有数据
dq.erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。
dq.erase(pos);//删除pos位置的数据,返回下一个数据的位置。

映射

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;

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

你可能感兴趣的:(C++/C,c++,数据结构,算法)