首页 > 技术文章 > STL

tianyudizhua 2020-08-07 21:47 原文

#include<iostream>
#include<vector>
#include<set>
#include<string>
#include<map>
#include<queue> 
#include<stack>
#include<utility> 
#include<algorithm>
//set只能通过迭代器访问 
using namespace std;//stl需要命名空间
vector<vector<int> > name;//vector的定义可以是基本类型
//结构体类型但是如果是stl类型要加空格
vector<int> vs[1000];//定义vector数组
//vector可以通过下标和迭代器访问
vector<int> vi;
set<int> s;
string str="abcd";//可以通过下标和迭代器访问
//和vector一样支持直接对迭代器加减数字 
map<string,int>mp; 
queue<int> q;
priority_queue<int> q2; 
    struct fruit{
        string name;
        int price;
        friend operator <(fruit f1,fruit f2)//只能重载<价格高的优先级高和sort cmp相反 
        {
            return f1.price<f2.price; 
        } 
    };
        struct cmp{
        bool operator () (fruit f1,fruit f2)
        {
            return f1.price>f2.price;
        }
    };
int main()
{
    for(int i=1;i<=5;i++)
    {
        vi.push_back(i);
    }
    for(vector<int>::iterator it=vi.begin();it!=vi.end();it++)
    {
        cout<<*it<<" "<<endl;
    }
    vector<int>::iterator it2=vi.begin();
    for(int i=0;i<=5;i++)
    {
        cout<<*(it2+i)<<" "<<endl;
    }
    vi.pop_back();
    vi.size();
    vi.clear();
    vi.insert(vi.begin()+2,-1); //将-1插入vi[2]的位置
    vi.erase(vi.begin()+3);//删除单个元素
    vi.erase(vi.begin()+1,vi.begin()+4);//删除一个区间的元素 
    s.insert(100);//自动递增排序和降重 
    s.find(100);//返回迭代器
    //set.erase();2种 
    s.size();
    s.clear();
    //处理不唯一的情况mutilset
    //unordered_set只降重 散列代替红黑树 
     //string 读入和输出只能用cin cout
     printf("%s",str.c_str());//将string转换为字符数组 
     //string +=拼接 >=等符号比较字典序
     //length()和size()基本相同
     //insert(pos,string)
     //insert(it,it2,it3) it待插位置 [it2,it3)待插收尾迭代器 
     //erase()2种
     //substr(pos,len)
     //string::pos find函数失配返回值
     //find(str2)//返回第一次出现的位置的pos 
     //find(pos,str2)
    // str.replace(pos,len,str2);从pos长len替换str2
    //str.replace(it1,it2,str);
    map<char,int>mp;
    mp['c']=20;
    //map会按照键从小到大排序 
    //迭代器访问it->first,it->second
    //map.find(key)返回键值为key迭代器
    //map.erase(it)
    //map.erase(key) 
    //map.erase(first,last)
    //map.size()
    //map.clear()
    //多值对应mutimap unordered_map不按照key排序 
    //queue.push()入队pop 出队front队首元素 back队尾元素
    //empty size() 在使用front和back要判空
    //deque 
    //priority_queue 添加头文件queue就行 
    //没有front和back函数只能top访问队首元素
    //push top pop empty size
    //优先级设置
    priority_queue<int,vector<int>,less<int> > q; 
    //less数字大优先级大 greater<int> 数字小优先级大
 
    //friend 去掉 <改()重载的函数用结构体包装起来写在结构体外面 

     priority_queue<fruit,vector<fruit>,cmp> q5; 
     //如果结构体数据庞大可以在比较函数用引用和const 参数 
     //stack push pop top empty size
     //map包含utility
    // pair<string,int>p;
     // pair<string,int>p2("22",1); 
    // 临时pair pair<string,int>("22",1); make_pair("hah",2)
    //访问用p.first,p.second
    //pair可以直接用<等符号计较大小,先比较first在比较second 
    //map.insert(make_pair("hah",2));
    
    //max min abs(int)x必须是整数 math.h 下fabs用于浮点数
    //swap reverse(it1,it2) 反转数组 string 
    //next_permutation(a,a+3)给出下一个全排列
    //fill(a,a+3,233) sort(a,a+6)
//sort函数只能用于string vector deque 而set和map内部是红黑树的不能用sort
/* bool cmp(int a,int b) { return a>b; a>b时a放b前 } sort(a,a+4,cmp); *///lower_bound(first,last,val)返回第一个大于等于val位置 //upper_bound(first,last,val)返回第一个大于val位置 //如果是数组就返回指针如果是stl容器就返回迭代器 return 0; }

 

推荐阅读