STL简单应用
一、string:
1.头文件:#include
2.常用操作:s.empty(),s为空则返回true,否则返回false
3.S.size()返回s的字符个数 s1=s2为赋值 s1+s2为连接 s1+=s2为追加。
4.比较:两个string相等则意味着它们的长度相同,所含字符相同,大小关系依照字典序并且区分大小写。
5.可用下标运算符来访问string 对象中所指位置的字符。下标从0到s.size()-1
二、栈stack:
1.先进后出,定义类型为 stacks;
2.常用操作:top()返回栈顶元素
3.s.push(a)压入元素a; pop()移除栈顶元素。
三、队列queue:
1.先进先出 定义类型为 queueq;
2 .常用操作:back()返回最后一个元素3.front()返回下一个元素 pop()移除元素
四、排序sort:
1.头文件#include
2.普通:sort<begin,end>为升序
3.自定义sort<begin,end,cmp>
bool cmp(int a,int b){return a>b;}
解释:如果a>b则返回true并且不交换,否则返回false并且交换位置
五、万能头文件: #include<bits/stdc++.h>
六、unique去重之后并不是把重复的元素藏在了最后, 而是,直接将排序后的数组最后的元素不变, 只将不重复的元素排在数组最前边
unique(a,a+n)返回的是从去重后(不重复数列中)最后一个元素的尾地址,减去地址a就是数列的长度
贪心算法
解释:在资料上找到的通俗的解释就是,求最优解的方法。它按照某种最优策略,将复杂的问题层层分解成子问题。并由子问题的最优解反过来回溯出整个问题的最优解。
当然在用贪心这种方法时,我们要先考虑两个问题。1该题是否合适用贪心策略2如何选择标准。
在上课的时候,老师用了一个通俗易懂点例子来作解释:就像去买东西,如果现金支付的话,找钱问题。如果需找钱76元的话,他不会全找你一块的,他会按照最优解,先给你五十的再给你二十的,这样层层求解,最后可以得出用最少的张数来找出所需的金额。
例子1:如装载问题,在不超过轮船载重的前提下,尽可能多的往船上装货物。那这样我们可以想到,先要放最轻的,然后依次放。因为我们要以放更多的货物为目的。
解法:先按重量排序,简单升序直接用sort函数就好。还有要注意sort函数区间是前开后闭。现在问题是,排序后,数组下标会改变,那么怎么才能将原标号输出呢?这里就要运用struct。我们可以用这个结构将重量和原下标号分开放置。这样按照重量排序后,我们仍可以找到它的原下标号。
struct load {
int index; //集装箱编号
int w; //集装箱重量
}box[1001];这个就是将体重和标号分别放置。
while (scanf("%d%d", &c, &n)!=EOF)
{
memset(box, 0, sizeof(box));
memset(x, 0, sizeof(x));
for (int i=1; i<=n; i++)
{
scanf("%d", &box[i].w);
box[i].index = i;
}
//按集装箱的重量升序排序
stable_sort(box, box+n+1, cmp);
if (box[1].w>c) {
printf(“No answer!\n”);
continue;
}
/这一步是将数组初始值赋值为零然后输入重量,EOF是文件结束标志,把x全初始为零是很重要的一步,因为它要区分出已经装上车和没装上车的货物/
int i;
for (i=1; i<=n && box[i].w<=c; i++)
{ x[box[i].index] = 1;
c -= box[i].w;}
//输出装载的集装箱数量
printf("%d\n", i-1);
//输出装载的集装箱编号
for (i=1; i<=n; i++)
if (x[i]) printf("%d “, i);
printf(”\n");
}/这一步就可以看出x[box[i].index] = 1;就是装上船的将其变为1,这样最后可以将原下标输出/
最后最后最后总结,重要的点是1排序2用结构分别放置重量和标号3定义个x数组,将所有的都初始为零,当装上船一个就将其变为1,最后输出这些为1的标号i即为原标号。
(这是第一次发表这种总结类的东西,也算是一次尝试。经过这次,我才知道了其他博主那些简单整洁的博客需要投入多少精力。我刚刚接触到这个领域,慢慢发现了自己有多么渺小。之前好像也没有养成好的学习习惯,每次都是为了考试而学习,并没有把那些知识真正学到脑袋里。这是我大学以来的第一次学习态度上的转变,我会继续努力,争取每次都有进步,将知识真正的理解内化为自己熟练掌握的东西。因为第一次写,所以语言表达,知识的牵引都不到位,如有错误,望指正)