STL不熟知识点总结

在前面已经总结了STL基本知识点的应用,本篇博客我将主要总结一下自己对STL这一方面不熟的知识点。
一.

  1. 用迭代器遍历map中的元素(访问标准容器的元素的通用方法是使用迭代器)
for(map<string,int>:iterator it=b.begin;it=b.end;it++)

2.it->first 表示用迭代器指向map中的键值 it->second 表示用迭代器指向map中的实值 其中it为指针,->为成员提取的意思,表示提取指针it中的。。
(1)
m.insert(map<string, int>:: value_type (“mp”, 22));
(2)
m.insert(pair<string, int>(“mp”, 22));
(3)
m.insert(make_pair(“mp”, 22));

4.map函数的应用
m.count(b) --------------返回指定元素b出现的次数

5.erase删除
m.erase(elem) 移除键值为elem的所有元素,返回个数,对于map来说非0即1。

二. isalpha函数
判断字符ch是否为英文字母,当ch为英文字母a-z或A-Z时,返回非零值,否则返回零。

三. tolower函数
函数说明:若参数 A 为大写字母则将该对应的小写字母 a 返回。
返回值:返回转换后的小写字母,若不须转换则将参数a 值返回。
toupper函数
函数说明:若参数 a 为小写字母则将该对应的大写字母 A返回。
返回值:返回转换后的大写字母,若不须转换则将参数A值返回。

四. vector函数初始化方法的不同
vectorv2(v1)-----------相当于vector v2=v1 (动态数组和数组的不同之处在于vector可以整体赋值,而数组不可以整体赋值)
vector(n,val)---------初始化为n个val
vectorstr{“how”,“are”,“you”}
易混淆的问题
vectorv1(10);//v1有10个元素,每个都初始化0
vectorv2{10};//v2有一个元素,值为10
vectorv3[10];//v3是有10个元素的数组,但这种方法不经常用
vectorv4(10,1);//v4有10个int型的元素,均为1
vectorv5{10,1};//v5有2个int 型的元素,值为10和1

五.字符串流stringstream
1.标准库头文件#include<sstream>
2.字符串流的用途:
从输入流一次性读取一大块数据,以字符串形式保存在istringstream中,再用适当的输入操作逐项从istringstream对象中提取各个数据项
3.例题.
istringstream类用于执行C++风格的串流的输入操作。//它的作用是从string对象str中读取字符。遇空格结束

string str =“I am boy”;
string b;
istringstream in(str)
while(in >> b){
cout << b<<endl;//
}
//输出:
I
am
boy

六.next_permutation和prev_permutation
题目大意:
输入一个数N,规定1,2,3,…,N-1,N为第一排列顺序,第二排列顺序为1,2,3,…,N,N-1。输入两个数N、M,输出1到N的第M个排列。
答题思路:
使用next_permutation()函数对数列进行排序

#include<bits/stdc++.h>
using namespace std;
int a[2000];
int main()
{
       int n,m,x;
       while(cin>>n>>N)
       {
              x=0;
              for(int i=1;i<=n;i++)
              {
                   a[i]=i;
               }
              do{   
                         x++;
                         if(x=m) 
                           break;
                   }while(next—permutation(a,a+n+1)
           for(int i=1;i<n;i++)
           {
                 cout<<a[i]<<" ";
                cout<<a[n]<<endl;
          }
      return 0;
   }                          
                          

七.筛法
筛法是一种效率极高的代码优化方法,对于查找某个数这种问题,遍历这种方法对于某些要查找的极大数据效率很低。用筛法可以高效的查找元素。
例如:丑数问题
抽数是指不能被2,3,5以外的素数整除的数,即它的质因数只能是2,3,5,把所有丑数从小到大排序,求第1500个丑数。

#include<iostream>
#include<queue>
#include<set>
#include<cstdio>
#include<string>
using namespace std;
typedef long long ll;
const int k[3]={2,3,5};
int main()
{
    priority_queue<ll,vector<ll>,greater<ll> > pq;
    set<ll> s;
    pq.push(1);
    s.insert(1);
   for(int i=1;;i++)
   {
       ll x=pq.top();pq.pop();
       if(i==1500)
       {
           cout<<"The 1500'th ugly number is "<<'<'<<x<<'>'<<endl;
        break;
       }
        for(int i=0;i<3;i++)
        {
            ll x2=x*k[i];
            if(!s.count(x2)) {s.insert(x2);pq.push(x2);}
        }
   }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/wcxyky/article/details/88372853