分享刷题的一些小知识点--4.9日

1.string库提供了 >、<、==、>=、<=、!= 等比较运算符,比如两个字符串s和t,直接(s==t)是正确的。

2.unordered_map 容器,直译过来就是"无序 map 容器"的意思。所谓“无序”,指的是 unordered_map 容器不会像 map 容器那样对存储的数据进行排序。换句话说,unordered_map 容器和 map 容器仅有一点不同,即 map 容器中存储的数据是有序的,而 unordered_map 容器中是无序的。

头文件:#include<unordered_map >

3.vector::earse

是擦除容器内固定位置的值或者一个区间的值,但是它的返回值是一个迭代器,指向最后一个删除元素的下一个元素;

for(Iter = v1.begin(); Iter != v1.end(); Iter++) 
{ 
  if(*Iter == 10) 
  { 
   Iter = v1.erase(Iter);//Iter为删除元素的下一个元素的迭代器
  //即第一次这段语句后Iter 会是20,大家可以通过debug调试出来查看下数值
  } 

总是容易写成v1.erase(v1[i]);//这样会使迭代器编程野指针,造成系统崩溃

4.两个字符串需要比较时,可以让字符串的值转为数字而成为容器或者数组里中括号里的值,那么它等于哪个数字就代表这个字符有几个,比如下俐中:

 bool canConstruct(string ransomNote, string magazine)
    {
        int m[26]={0};
        for(int i=0;i<magazine.size();i++)
        {
            m[magazine[i]-'a']++;//1,比如这里有字母转化为数字9,而a[9]=2;就代表9有两个
        }
        for(int j=0;j<ransomNote.size();j++)
        {
            m[ransomNote[j]-'a']--;
            if(m[ransomNote[j]-'a']<0)  return false;
        }
        return true;
    }

5.string中find ()返回值是字母在母串中的下标位置

6.函数的返回类型是vector,但是题中需要用到set容器操作,可以定义set存储结果,在最后返回的时候就定义vector<类型>(set.begin(),set.end());如下:

 return vector<int>(res.begin(),res.end());

7.vector插入数据是push_back:在数组的最后添加数据,但是set是insert函数插入数据。

猜你喜欢

转载自blog.csdn.net/weixin_62456756/article/details/130046654