pat知识点复习--day78

STL专题

本次学习内容:vector,set,string,map

vector是向量,可以视为不定长数组。set是集合,带自动去重和排序(默认升序排列),string是字符串。map是映射

定义及访问方式:

  vector<typename> name; 

    eg: vector<int>v;  vector<vector<int> >v;//这个保留空格避免被当作移位符号。vector<int>v[100];//也可以设置定长的

  在访问的时候可以使用下标访问:eg:temp[3],也可使用迭代器访问具体元素,且迭代器可以使用+x的形式

    eg:v[1];  vector<int>::iterator it=v.begin(); *it; *(it+3);  注意v.end()返回的是尾+一个单位元素的地址 v[i]=*(v.begin()+i)

  for(vector<int>::iterator it=v.begin();it!=v.end();it++)

  set<typename> name;

    eg:set<int>s;  set<vector<int> >s;//理由同  set<int>temp[100];//可以设置定长

  只可使用迭代器访问,不可使用下标,it++可以,不可以用it加数字这种。

  string name;

    eg:string str="abcd";//可直接赋值 可使用下标访问,整体的读写使用cin和cout,或者 str.c_str()转换成char str[],再使用printf("%s",a)输出

  string::iterator it=s.begin(); 也可使用直接下标访问。可以使用str.begin()+x,迭代器操作和vector同,str1+str2可以拼接,同时支持大小号比较(返回结果符合字典序)

  str.length()=str.size()

  map<typename1,typename2>temp;自动按照key升序排序。可使用key访问eg:m['c'],是一一对应的,不可以一对多

  注意typename可以是STL可以是其他类型,但是不可以是数组(string可数组不可),迭代器的it++是ok的,it->first是key,it->second是值。

insert:

  it表示需要写迭代器,pos表示填写下标,temp代表元素值

  vector的:v.insert(it,temp),在迭代器it的位置插入temp,本位数据向后延,不删除。

  set的:s.insert(temp),在集合中插入temp,里面的数据自动排序不需要指定位置

  string的:str.insert(pos,x),在下标pos插入字符串x,或者s.insert(it1,it2,it3)在迭代器it的位置,将迭代器[it2,it3)对应位置的字符串插入。

相同的:

  v.clear()清除全部元素

  v.size()求元素个数,string多了一个s.length()

erase:

  vector:v.erase(it)去除迭代器处元素,v.erase(first,last),去除迭代器[first,last)范围内的元素

  set:v.erase(it)去除迭代器处元素,多与find结合 v.erase(find(x)),v.erase(x)直接去除某元素(erase复杂度1,findlogn,合起来还是logn),v.erase(first,last)同上

  string:s.erase(it),s.erase(first,last)同上,多了一个s.erase(pos,length),去除从pos开始的length长度的元素。

  map:m.erase(it),m.erase(first,last)同上,多一个m.erase(key),删除key对应的map数据

find:

  vector没有

  set:find(x)返回对应x的迭代器

  string:find(str),寻找子串第一次出现的位置,find(str,pos)从pos开始到结束的str第一次出现的位置,结果是下标。

  map:find(key),返回的是key对应的迭代器

独有的:

  vector:v.push_back(x) ,尾部插入元素x,v.pop_back(),尾部删除最后一个元素。

  string:s.replace(pos,len,str)从pos下标开始长度为len的串,替换成str s.substr(pos,len)返回字符串,从pos下标开始,字符串长度为len

  只有string可以直接拼接,可以使用大于小于比较。别的stl里面迭代器不可以。

时间才能证明一切,选好了就尽力去做吧!
原文地址:https://www.cnblogs.com/tingxilin/p/12297139.html