走进STL
发布时间:2020-12-15 05:23:45 所属栏目:Java 来源:网络整理
导读:快速排序 快速排序是一个经典算法: #includealgorithm // 头文件 sort(A,A+n); // 对一个下标从0开始存储,长度为n的数组升序排序 ? vector容器 vector容器。随着元素的数量而改变大
快速排序快速排序是一个经典算法: #include<algorithm>//头文件 sort(A,A+n);//对一个下标从0开始存储,长度为n的数组升序排序 ?vector容器vector容器。随着元素的数量而改变大小。它其实就是数组,却比数组强得多。 下面看看它的几种操作: vector<int> V;//定义 V.push_back(x);//末尾增加一个元素x V.pop_back();//末尾删除一个元素 V.size();//返回容器中的元素个数 它同样可以使用下标访问。(从0开始) 和普通队列一样,它有这些基本操作: V.size();//返回q里元素个数 V.empty();//返回q是否为空,空则返回1,否则返回0 V.push(k);//在q的末尾插入k V.pop();//删掉q的第一个元素 ---这个操作最重要 V.top();//返回q的第一个元素 ? bitset bitset用来压位,使复杂度在原来的基础上除以32? #include <bitset> bitset<N> S; //这样就可以建一个bitset了 S.set(); //全部变成1 S.reset(); //全部变成0 S.count(); // 返回1的个数 S.flip(); // 把S每一位都取反 S.flip(i); //仅把第i为取反 S.any(); //返回是否有1 S.none(); //返回是否没有1 ///表示并不知道这个看似牛逼的操作有什么用 a.to_ulong() //转成一个unsigned long long的数. //bitset支持位运算操作,非常强大. 如 a = a & b; a = a ^ b; a = a | b; ?map#include <map> map<type1,type2> a; //这样就定义了一个map. 需要注意的是,其中type1表示的是下标的类型,type2则表示的是存储数的类型. 例如map<string,int> a,map<int,int> a... 修改、使用都是类似于:a[type1] = type2 a.erase(type1) // 表示删除某个数 a.clear(); //清空 a.empty(); //判断是否为空 a.size(); //返回a的元素个数 map的用法还是很多的。 注意,一般来说,我们是定义 map <int,int> h; 如果要在某个位置赋值,可以直接调用 h[x] = y; 但注意,因为几乎所有的STL容器我们都只能用 :: iterator it; 来得到位置,所以如果我们要把对应的值求出来,则要用 it -> first 或 it -> SEOnd 两种操作。 最后还需要知道,map的实现是类似于set的,所以他也支持log loglog的查找最小最大值。 具体来说,我们可以这样调用: for (map<int,int> :: iterator it = h.begin(); it != h.end(); it ++) { printf("%dn",it->first) H[it->first] = 1; } ?set#include <set> set <int> a; //这样就建好一个set了 请务必注意:set是不可以支持重复元素的,想要有重复元素,可以使用multiset multiset <int> a; //这是可以支持重复元素插入的。 a.insert(x); //表示在set里面插入一个x元素. a.erase(x); //表示把set里面所有为x的数的删掉. a.erase(a.find(x)); //这个表示只删除一个x. *a.begin() // 表示最小值 *a.end() // 表示最大值的下一个位置 *--a.end() //表示最大值 // 因为返回的都是一个迭代器,所以具体数值要在前面加一个*号。 可能有时候要多次用到某个迭代器,所以我们可以把他储存下来,用一个it来表示,其中it这样定义: multiset<int> :: iterator it; //那么像上面的最小值,就可以这样表示it = a.begin(),printf("%dn",*it). it ++就可以表示下一个位置的元素,当然不要滥用,因为这个++是需要log的时间复杂度的。。 其中,set里面最重要的两个操作就是上面vector里面的两个操作,即lower_bound和upper_bound. it = a.lower_bound(x) //表示找到第一个大于等于x元素的迭代器 it = a.upper_bound(x) //表示找到第一个大于x元素的迭代器 ? ctime时间测试+随机使用 在某些时候-随机功能可以拿来骗分使用,我们下次再提 srand(time(0)) //随机种子,没有这个东西,随机相当于没有随机. 主要想说的是这个: int st = clock(); // do sth printf("%lfn",(double) (clock() - st) / CLOCKS_PER_SEC) 注意包含头文件 #include <stdlib.h>
#include <time.h>
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Java命令行运行参数说明大全--转
- java – ILazyContentProvider更新每个viewer.setItemCount
- java – SWT:检查是否同时按下了多个键
- java – @BeforeClass vs static {}
- java – 使用URLEndpoint通过代理进行SOAP连接
- 是否有可能在j2me开发中调用本机播放器并播放视频?
- Java中获取刚插入数据库中的数据Id(主键,自动增长)
- 计时器错误java.lang.IllegalStateException
- 您是否可以在Java中使用类似于关键字args的概念来最小化访问
- basecalling|vector mark|Assembly的难题|