5-2Ducci序列
1、整型数组转成string:
void change(int *aa,int mm)
{
stringstream pp;
for(int i=0;i<mm;i++)
{
pp<<aa[i];
ssss=pp.str();
}
}
流转化,如果aa包含元素有:8,11,2,7那么ssss的变化过程为:
8,811,8112,81127,是一个累积的过程。
转换成string型后放进集合:
a.insert(ssss);
2、string是可以和char[maxn]比较的
char sss[maxn];
string ssss;
for(int i=0;i<mm;i++)
{
sss[i]='0';
}
if(ssss==sss) {cout<<"ZERO"<<endl;break;}
3、在set中找匹配的元素
if(find(a.begin(),a.end(),ssss)==a.end()) {a.insert(ssss);}
else {cout<<"LOOP"<<endl;break;}
else的那一部分表示找到了
4、整型数组拷贝
memcpy(s,ss,sizeof(ss));
整型数组s和ss的大小相同,将ss的内容拷贝到了s上面,在cstring头文件里
5-3卡片游戏
1、队列的清理用的aa.clear();这个清理删掉了所有元素没有释放内存。
2、队列的几种操作,pop()出队,push()进队,front()队首元素。
3、迭代器的使用,vector遍历经常使用迭代器。
5-4交换学生
1、在集合中查找特定元素:要声明库algorithm
if(find(ss.begin(),ss.end(),s)==ss.end()) {n1++;}
else {ss.insert(s);n2++;}
这是在集合中找和string型的s匹配的元素,如果找到执行else,没有执行if。
2、整型数组转换为字符串(流转换)
stringstream pp;
for(int j=0;j<=1;j++)
{
pp<<a[j];
s=pp.str();
}
注意要声明库sstream,不然会格式错误。
5-5复合词
1、输入可能造成的超时:
while(cin>>s) ss.insert(s);
这是我现在用的输入,之前用的输入是
while(getline(can,s)) ss.insert(s);
2、最主要的超时问题:find函数查找集合中元素的问题:
if(ss.count(s2)&&ss.count(s3)) {cout<<s1<<endl;break;}
这是现在我用的,之前用的是:
f(find(ss.begin(),ss.end(),s2)!=ss.end()&&find(ss.begin(),ss.end(),s3)!=ss.end()) {cout<<s1<<endl;break;}
find函数能用count代替的尽量代替
3、学到的substr()函数:
s2=s1.substr(0,i);
表示从0的位置截取出i个元素放入新的串里。
s3=s1.substr(i);
表示从i的位置截取到串的末尾放入新的串里。
4、注意:set不可以排序,内部就是默认的字典序
5-6对称轴
1、multimap的使用:
首先设置迭代器
multimap<int,int>::iterator m;
然后对特定元素个数进行统计:
int b=int(f.count(*it));
这里的*it是集合中的元素,需要统计出这一元素对应的个数作为循环条件使用。
然后对特定元素进行查找
m=f.find(*it);
最后提取出该元素对应的second量,即横坐标
for(int k=0;k!=b;k++,m++)
{int bb=m->second;all=all+bb;}
具体细节可以参考:
https://zhidao.baidu.com/question/918049459459983899.html
以及:
https://blog.youkuaiyun.com/xy_cpp/article/details/80426852?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3
这些是multimap用法比较好的参考资料
5-7打印队列
1、vector中的最大值的提取
int maxn=*max_element(s.begin(),s.end());
2、vector的begin()是一个迭代器,vector的第一个元素可以用s[0]或者s.front()进行提取
3、使用对称操作来应对具有特殊标记的问题
4、利用count函数代替find减少时间
if(count(ss.begin(),ss.end(),-1)==0)