. P1396 60分
(调试
int find(int x)//并查集基本操作 { if(a[x]==0) return x; a[x]=find(a[x]); return a[x]; }
做了三道题(扭
开始学习stl模板(der~der
给博客换了个新皮肤(鼓掌!!!!!!
http://c.biancheng.net/cplus/80/
stl——set
set 中不能有重复的元素
不能直接修改 set 容器中元素的值。
如果要修改 set 容器中某个元素的值,正确的做法是先删除该元素,再插入新元素
头文件 <set>
int main() { set<int> s; //创建set字典,类型为Int类型 s.insert(1); //向set字典中插入元素 s.insert(2); s.insert(3); s.insert(1); cout<<"set 的 size 值为 :"<<s.size()<<endl; //得到set字典含有的元素数量 cout<<"set 的 maxsize的值为 :"<<s.max_size()<<endl; //返回整个字典开辟的空间 cout<<"set 中的第一个元素是 :"<<*s.begin()<<endl; //s.begin()返回第一个元素的地址 cout<<"set 中的最后一个元素是:"<<*s.rbegin()<<endl; //s.rbegin()返回最后一个元素地址 cout<<"set 中 1 出现的次数是 :"<<s.count(1)<<endl; //s.count(value)返回value在字典中出现的次数 s.clear(); //清空字典 if(s.empty()) { cout<<"set 为空 !!!"<<endl; } cout<<"set 的 size 值为 :"<<s.size()<<endl; cout<<"set 的 maxsize的值为 :"<<s.max_size()<<endl; return 0; }
stl——list
使用 list 需要包含头文件 list
//构造函数 list<T> lstT;//list采用采用模板类实现,对象的默认构造形式: list(beg,end);//构造函数将[beg, end)区间中的元素拷贝给本身。 list(n,elem);//构造函数将n个elem拷贝给本身。 list(const list &lst);//拷贝构造函数。 //实例 list<int>lt; list<int>lt1(lt.begin(),lt.end()); list<int>lst(10,100); list<int>lst1(lst); //插入和删除 push_back(elem);//在容器尾部加入一个元素 pop_back();//删除容器中最后一个元素 push_front(elem);//在容器开头插入一个元素 pop_front();//从容器开头移除第一个元素 insert(pos,elem);//在pos位置插elem元素的拷贝,返回新数据的位置。 insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值。 insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。 clear();//移除容器的所有数据 erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。 erase(pos);//删除pos位置的数据,返回下一个数据的位置。 remove(elem);//删除容器中所有与elem值匹配的元素。 //示例 lst1.push_back(1); lst1.pop_back(); lst1.push_front(111); lst1.pop_front(); list<int>::iterator it = lst1.insert(lst1.begin(), 10); lst1.insert(lst1.begin(), 2, 333); lst1.erase(++lst1.begin(), --lst1.end()); lst1.erase(lst1.begin()); lst1.remove(100); lst1.clear(); //list大小操作 size();//返回容器中元素的个数 empty();//判断容器是否为空 resize(num);//重新指定容器的长度为num, 若容器变长,则以默认值填充新位置。 如果容器变短,则末尾超出容器长度的元素被删除。 resize(num, elem);//重新指定容器的长度为num, 若容器变长,则以elem值填充新位置。 如果容器变短,则末尾超出容器长度的元素被删除。 //示例 int size = lst.size(); lst.empty(); lst.resize(15); lst.resize(20, 1); //list赋值操作 assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。 assign(n, elem);//将n个elem拷贝赋值给本身。 list& operator=(const list &lst);//重载等号操作符 swap(lst);//将lst与本身的元素互换。 //示例 lst.assign(++lst.begin(),--lst.end()); lst.swap(lst); // list数据的存取 front();//返回第一个元素。 back();//返回最后一个元素。 //示例 int fst = lst.front(); int est = lst.back(); // list反转排序 reverse();//反转链表,比如lst包含1,3,5元素,运行此方法后,lst就包含5,3,1元素。 sort(); //list排序 //示例 lst.reverse(); //反转链表 ex:1,3,5 ->>5,3,1 lst.sort(); //排序
stl——deque
需要包含头文件 deque
deque构造函数 deque<T> deqT;//默认构造形式 deque(beg, end);//构造函数将[beg, end)区间中的元素拷贝给本身。 deque(n, elem);//构造函数将n个elem拷贝给本身。 deque(const deque &deq);//拷贝构造函数。 deque赋值操作 assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。 assign(n, elem);//将n个elem拷贝赋值给本身。 deque& operator=(const deque &deq); //重载等号操作符 swap(deq);// 将deq与本身的元素互换 deque大小操作 deque.size();//返回容器中元素的个数 deque.empty();//判断容器是否为空 deque.resize(num);//重新指定容器的长度为num,若容器变长,则以默认值填充新位置。如果容器变短,则末尾超出容器长度的元素被删除。 deque.resize(num, elem); //重新指定容器的长度为num,若容器变长,则以elem值填充新位置,如果容器变短,则末尾超出容器长度的元素被删除。 deque双端插入和删除操作 push_back(elem);//在容器尾部添加一个数据 push_front(elem);//在容器头部插入一个数据 pop_back();//删除容器最后一个数据 pop_front();//删除容器第一个数据 deque数据存取 at(idx);//返回索引idx所指的数据,如果idx越界,抛出out_of_range。 operator[];//返回索引idx所指的数据,如果idx越界,不抛出异常,直接出错。 front();//返回第一个数据。 back();//返回最后一个数据 deque插入操作 insert(pos,elem);//在pos位置插入一个elem元素的拷贝,返回新数据的位置。 insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值。 insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。 deque删除操作 clear();//移除容器的所有数据 erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。 erase(pos);//删除pos位置的数据,返回下一个数据的位置
累了woc
不想搞了
草
决定了
看两章小说学一个stl模板
不愧是我(、
stl——priority-queue
https://www.cnblogs.com/GHzcx/p/8672294.html
stl——multiset
multiset允许容器中有重复的元素
其余与set相同
stl——map+multimap
#include<map>
暂时不会,晚点再学
会了
https://blog.csdn.net/OO_SEN/article/details/99981893
眼睛疼,ctmd