【日常学习】STL之set

今天刚刚学习了set 在我写这篇文章之前 请允许我首先对TY菌表示诚挚的感激 请教TY菌之前我眼里ruka简直不知所云TUT

set是一个集合 和康托前辈的一样 集合中的元素不重复 且集合中的元素是有序的(自动有序化) TY菌介绍说其内部实质是一个平衡树

set不是数组 只能通过迭代器(iterator)把里面的元素倒出来 迭代器相当于是指针 扫描的是地址 因此输出的时候需要用*variation

声明:

需要用到头文件set

set<string> dict; 建立一个集合 其名为dict 基类型是string

常用函数:

dict.insert() 将括号里的变量放到集合中

dict.begin() dict.end()返回集合最初和最后的元素的地址

这是写这个例题用到的

在某书的最后函数附录里看到这些好像都是list模板函数 暂时还不清楚是怎么回事

这次例题是Uva10815 – Andy’s First Dictionary 安迪的第一个字典 大意是给你一段文字 把里面的单词按字典序排列 每个单词只出现一次

先放代码

#include<iostream>#include<string>#include<set>#include<sstream>using namespace std;set<string> dict;//set up a set called dict-short for dictionary,and it's based on string type;int main(){string s,buf;while (cin>>s){for (int i=0;i<s.length();i++)if (isalpha(s[i])) s[i]=tolower(s[i]);//if it's an letter,turn it lowercase.Others turn space and use stringstream to leave it out=ignore itelse s[i]=' ';stringstream ss(s);while (ss>>buf) dict.insert(buf);//insert it into the set which is already in order,TYkon said it's a balanced tree inside}for (set<string>::iterator it=dict.begin();it!=dict.end();++it)//iterator just like a point,scan it from beginning to end and output cout<<*it<<endl;//NOTICE output by pointreturn 0;}还是英文注释不过看懂应该问题不大

isalpha()判断是否是字母 如果是就用头tolower()转换成小写 否则就转为空格 这样是为了字符串流重读入的时候能够把空格去掉

特别强调一下本例中出现的迭代器

for (set<string>::iterator it=dict.begin();it!=dict.end();++it)//iterator just like a point,scan it from beginning to end and output cout<<*it<<endl;//NOTICE output by point迭代器iterator相当于是个类型 it是一个变量 基类型是iterator 它从开始扫到结尾的前一个【据TY菌解释 像数组一样 最后一位是没有值的 数组是一个结束标志 不知集合最后是什么】输出的时候 由于it扫描的是地址 要输出*it

显然对于set我还知之甚少 还需要在今后的学习中不断掌握

这个寒假又是一个繁忙的寒假 希望我在这个短暂仓促却又温暖充实的假期中能长进良多

—— 渐黄昏,清角吹寒,都在空城

,勇于接受自己的失败,告诉自己,这就是自己的现实,

【日常学习】STL之set

相关文章:

你感兴趣的文章:

标签云: