黑马c++STL学习

本文详细介绍了C++中的几种主要容器,包括vector、string、deque、stack、queue、list、set、multiset和map的基本操作,如构造、赋值、大小操作、插入删除、数据存取以及特殊功能如排序和查找等。
摘要由CSDN通过智能技术生成

vector容器

  1. vector放置数据类型

容器:vector

算法:for_each

迭代器:vector<int>iterator

#include <iostream>
#include <cstring>
using namespace std;
#include <vector>
#include <algorithm> //使用大三种方法遍历
void myPrint(int val)//使用第二种遍历  第一种遍历不需要 
{
    cout << val <<endl; 
} 
void bianli()
{
    vector<int> v; //创建一个vector容器,数组
    v.push_back(10);
    v.push_back(20);
    v.push_back(30);
    v.push_back(40);
    //第一种遍历方式
    for(vector<int>::iterator it = v.begin();it!=v.end();it++)
        cout<< *it << endl; 
    //第二种遍历方式利用STL提供算法
     for_each(v.begin(),v.end(),myPrint);
 } 
 int main()
 {
     bianli();
    return 0;
 }
  1. 容器嵌套容器

#include <iostream>
#include <cstring>
using namespace std;
#include <vector>
//容器嵌套容器 
void qiantaobianli()
{
    vector<vector<int>> v;
    //创建小容器
    vector<int>v1;
    vector<int>v2;
    vector<int>v3;
    vector<int>v4;
    vector<int>v5;
    //向小容器中添加数据 
    for(int i =0;i<4;i++)
    {
        v1.push_back(i+1);
        v2.push_back(i+2);
        v3.push_back(i+3);
        v4.push_back(i+4);
    }
    //将小容器插入大容器 
    v.push_back(v1);
    v.push_back(v2);
    v.push_back(v3);
    v.push_back(v4);
    for(vector<vector<int>>::iterator it = v.begin();it!=v.end();it++)
    {
        //(*it)----容器vector<int> 
        for(vector<int>::iterator vit = *it.begin();vit!=*it.end();vit++)
        {
            cout << *vit << " ";
            
        }
        cout << endl;
    }
} 
 int main()
 {
     qiantaobianli();
     return 0;
 }

  1. vector构造函数

#include <iostream>
#include <cstring>
using namespace std;
#include <vector> 
void printVector(vector<int>&v)
{
    for(vector<int>::iterator it = v.begin();it!=v.end();it++)
        {
            cout<<*it<<' ';
        }
    cout << endl;
}
void gouzao()
{
    //第一种默认构造 
    vector<int>v1;
    for(int i = 0;i<10;i++)
    {
        v1.push_back(i);
    }
    printVector(v1);
    
    //第二种通过区间方式构造 
    vector<int>v2(v1.begin(),v2.end());
    printVector(v2);
    
    //n个element构造方式
    vector<int>v3(10,100);//10个100 
    printVector(v3); 
    
    //拷贝构造 
    vector<int>v4(v3);
    printVector(v4);
} 
 int main()
 {
     gouzao();
     return 0;
 }

  1. vector赋值操作

#include <iostream>
#include <cstring>
using namespace std;
#include <vector> 
void printVector(vector<int>&v)
{
    for(vector<int>::iterator it = v.begin();it!=v.end();it++)
        {
            cout<<*it<<' ';
        }
    cout << endl;
}
void fuzhi()
{

    vector<int>v1;
    for(int i = 0;i<10;i++)
    {
        v1.push_back(i);
    }
    printVector(v1);
    
    //赋值
    vector<int>v2
    v2 = v1;
     printVector(v2);
     
     //assign方式赋值
     vector<int>v3;
     v3.assgin(v1.begin(),v1.end());
     printVector(v3); 
     
     //n个elem方式赋值
     vector<int>v4;
     v4.assgin(10,100);
     printVector(v4); 

} 
 int main()
 {
     fuzhi();
     return 0;
 }

5.vector容器的大小和容量

#include <iostream>
#include <cstring>
using namespace std;
#include <vector> 
void printVector(vector<int>&v)
{
    for(vector<int>::iterator it = v.begin();it!=v.end();it++)
        {
            cout<<*it<<' ';
        }
    cout << endl;
}
void daxia rongliang()
{

    vector<int>v1;
    for(int i = 0;i<10;i++)
    {
        v1.push_back(i);
    }
    printVector(v1);
    
    if(v1.empty())//为真 代表容器为空
    {
        cout<<"v1为空"<<endl; 
     } 
     else
     {
         cout<<"v1不为空"<<endl;
        cout<<"v1的容量为: "<<v1.capacity() <<endl;
        cout<<"v1的大小为: "<<v1.size()<<endl; 
     }
     //重新指定大小
     v1.resize(15,100); //如果参数2没有数值默认值为0 
     printVector(v1);  //如果重新指定的比原来长了,默认用0值来填充 
     
     v1.resize(5); 
     printVector(v1);

} 
 int main()
 {
     daxiao rongliang();
     return 0;
 }
 

  1. vector插入和删除

#include <iostream>
#include <cstring>
using namespace std;
#include <vector> 
void printVector(vector<int>&v)
{
    for(vector<int>::iterator it = v.begin();it!=v.end();it++)
        {
            cout<<*it<<' ';
        }
    cout << endl;
}
void  shanchu()
{
    vector<int>v1;
    //尾插
    v1.push_back(10);
    v1.push_back(20);
    v1.push_back(30);
    v1.push_back(40);
    v1.push_back(50); 
    printVector(v1);
    
    //尾删
    v1.pop_back();
    printVector(v1); 
    
    //插入 第一个参数是迭代器 
    v1.insert(v1.begin(),100);
    printVector(v1); 
    
    v1.insert(v1.begin(),2,1000);
    printVector(v1); 
    
    //删除
    v1.erase(v1.begin());
    printVector(v1); 
    
    //v1.erase(v1.begin(),v1.end());
    v1.clear();
    printVector(v1); 
     
} 
 int main()
 {
     shanchu();
     return 0;
 }
 

6.vector数据存取

#include <iostream>
#include <cstring>
using namespace std;
#include <vector> 
void cunqu()
{
    vector<int>v1;
    for(int i = 0;i<10;i++)
    {
        v1.push_back(i);
    }
    
    //利用[]方式访问数组元素 
    for(int i = 0;i<v1.size();i++)
    {
        cout<<v1[i]<<" "'
    }
    cout << endl;
    
    //利用at方式访问元素
    for(int i = 0;i<v1.size();i++)
    {
        cout<<v1.at(i)<<" "'
    }
    cout << endl;

    //获取第一个元素
    cout<< "第一个元素为: "<<v1.front()<<endl;
    
    //获取最后一个元素 
     cout<< "最后一个元素为: "<<v1.back()<<endl;
} 
 int main()
 {
     cunqu();
     return 0;
 }
 

  1. vector互换容器

#include <iostream>
#include <cstring>
using namespace std;
#include <vector> 
void printVector(vector<int>&v)
{
    for(vector<int>::iterator it = v.begin();it!=v.end();it++)
        {
            cout<<*it<<' ';
        }
    cout << endl;
}
void huhuan()
{
    vector<int>v1;
    for(int i = 0;i<10;i++)
    {
        v1.push_back(i);
    }
    printVector(v1);
    
    cout<<"互换前: "<<endl; 
    
    for(int i = 10;i>0;i--)
    {
        v2.push_back(i);
    }
    printVector(v2);
    
    cout<<"互换后: "<<endl; 
    v1.swap(v2);
    printVector(v1);
    printVector(v2);
} 
 int main()
 {
     charu huhuan();
     return 0;
 }

实际用途: swap可以收缩内存空间

#include <iostream>
#include <cstring>
using namespace std;
#include <vector> 
void printVector(vector<int>&v)
{
    for(vector<int>::iterator it = v.begin();it!=v.end();it++)
        {
            cout<<*it<<' ';
        }
    cout << endl;
}
void huhuan()
{
    vector<int>v;
    for(int i = 0;i<100000;i++)
    {
        v.push_back(i);
    }
    
    cout << "v的容量为:" << v.capacity() << endl;
    cout << "v的大小为:" << v.size() << endl;
    
    v.resize(3)//重新指定大小 
    cout << "v的容量为:" << v.capacity() << endl;
    cout << "v的大小为:" << v.size() << endl;
    
    //收缩内存
    vector<int>(v).swap(v);//匿名一个容器复制为与v相同大大小 并与v互换容器 互换后的原来v被释放 
    cout << "v的容量为:" << v.capacity() << endl;
    cout << "v的大小为:" << v.size() << endl; 
     
} 
 int main()
 {
     charu huhuan();
     return 0;
 }

  1. vector预留空间

v.reserve(100000);//已知要存储的空间直接预留

string容器

  1. string的构造函数

string(); //创建一个空的字符串 例如 string str;
string(cost char*s);//使用字符串s初始化
string(cost string& str);//使用一个string对象初始化例外一个string对象
string(int n,char c)//使用n个字符c初始化
#include <iostream>
#include <cstring>
using namespace std;
void gouzao()
{
    string s1;//默认构造
    cost char *str = "hello word";
    cout << "s1 = "<< s1 <<endl;

    string s2(str);
    cout << "s2 = "<< s2 <<endl;

    string s3(s2); 
    cout << "s3 = "<< s3 <<endl;

    string s4(10,'a')
    cout << "s4 = "<< s4 <<endl;
} 
 int main()
 {
     gouzao();
     return 0;
 }

  1. string赋值操作(一般使用operator足够)

#include <iostream>
#include <cstring>
using namespace std;
void fuzhi()
{
    string str1;
    str1 = "hello word";
    cout << "str1 = "<< str1 <<endl;
    
    string str2;
    str2 = str1;
    cout << "str2 = "<< str2 <<endl;
    
    string str3;
    str3 = 'a'; 
    cout << "str3 = "<< str3 <<endl;
    
    string str4;
    str4.assign("hello c++");
    cout << "str4 = "<< str4 <<endl;
    
    string str5;
    str5.assign("hello c++",5);
    cout << "str5 = "<< str5 <<endl;
    
    string str6;
    str6.assign(str5);
    cout << "str6 = "<< str6 <<endl;
    
    string str7;
    str7.assign(10,'w');
    cout << "str7 = "<< str7 <<endl;
} 
 int main()
 {
     fuzhi();
     return 0;
 }

  1. 字符串拼接

#include <iostream>
#include <cstring>
using namespace std;
void pinjie()
{
    //operator方式 
    string str1 = "我";
    str1 += "爱玩游戏";
    cout << "str1 = "<< str1 <<endl;
    
    str1 += ':';
    cout << "str1 = "<< str1 <<endl;
    
    string str2 = "LOL DNF";
    str1 +=str2 ; 
    cout << "str1 = "<< str1 <<endl;
    
    
    //append方式 
    string str3 = "I";
    str3.append("love");
    cout << "str3 = "<< str3 <<endl;
    
    str3.append("game abcde",4);//吧前四个字符拼接 
    cout << "str3 = "<< str3 <<endl; //I love game
    
    str3.append(str2);
    cout << "str3 = "<< str3 <<endl; //I love LOL DNF 
    
    str3.append(str2,0,3);
    cout << "str3 = "<< str3 <<endl; //I love LOL只从str20位截取三个 
} 
 int main()
 {
     pinjie();
     return 0;
 }
 

  1. string字符串的查找和替换

查找(一般使用find)

#include <iostream>
#include <cstring>
using namespace std;
void chazhao()
{
    //查找
    string str1 = "abcdefgde"
    int pos = str1.find("de")
    if(pos == -1)
        cout << "未找到字符串" << endl;
    else
        cout << "找到字符串,pos = " << pos << endl;
    //rfind 和find区别
    //rfind从右往左查找 find从左往右查找
    pos = str1.rfind("de"); 
} 
 int main()
 {
     chazhao();
     return 0;
 }
 

替换

#include <iostream>
#include <cstring>
using namespace std;
void tihuan()
{
    //替换
    string str1 = "abcdefg";
    //从一号位置起4个字符 替换为"1111" 
    str1.replace(1,3,"1111");
    cout << "str1 = " << str1 << endl; 
} 
 int main()
 {
     tihuan();
     return 0;
 }
 

  1. 字符串比较

#include <iostream>
#include <cstring>
using namespace std;
void bijiao()
    string str1 = "xello";
    string str2 = "hello";
    if(str(1).compare(str2) == 0)
        cout << "str1 = str2" << endl; 
    else if(str(1).compare(str2) >0)
        cout << "str1 > str2" << endl; 
    else if(str(1).compare(str2) <0)
        cout << "str1 < str2" << endl; 
} 
 int main()
 {
     bijiao();
     return 0;
 }
 

  1. 字符存取

#include <iostream>
#include <cstring>
using namespace std;
void cunqu()
{
    string str1 = "hello";
    //1.通过[]访问单个字符
    for(int i = 0;i<str.size();i++)
        cout << str[i] << ' ';
    cout << endl;
    
    //2.通过at方式访问单个字符
    for(int i = 0;i<str.size();i++)
        cout << str.at(i) << ' ';
    cout << endl;
    
    //修改单个字符
    str[0] = 'x';
    cout << "str = " << str << endl;
    
    str.at(1) = 'x';
    out << "str = " << str << endl;
} 
 int main()
 {
     cunqu();
     return 0;
 }

  1. 字符串插入和删除

#include <iostream>
#include <cstring>
using namespace std;
void charu shanchu()
{
    string str = "hello";
    //插入 
    str.insert(1,"111");
    cout << "str = " << str << endl;
    
    //删除
    str.erase(1,3);
    cout << "str = " << str << endl;
} 
 int main()
 {
     charu shanchu();
     return 0;
 }
 

  1. 字串获取

#include <iostream>
#include <cstring>
using namespace std;
void qiuzichuan()
{
    string email = "zhangsan@sin.com";
    int pos = email.find("@");
    string UserName = email.substr(0,pos);
    cout << UserName << endl;
    
} 
 int main()
 {
     charu qiuzichuan();
     return 0;
 }
 

deque容器

  1. deque构造

#include <iostream>
#include <cstring>
using namespace std;
#include <deque>
void printfDeque<deque<int>&d>
{
    for(deque<int>::iterator it=d.begin();i!=d.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
void gouzao()
{
    deque<int>d1;
    for(int i=0;i<10;i++)
    {
        d1.push_back(i);
    }    
    printfDeque(d1);
    
    deque<int>d2(d1.begin(),d1.end())
    printfDeque(d2);
    
    deque<int>d3(10,100);
    printfDeque(d3);
    
    deque<int>d4(d3);
    printfDeque(d4);
} 
int main()
{
    gouzao();
    return 0;
}

  1. deque赋值操作

#include <iostream>
#include <cstring>
using namespace std;
#include <deque>
void printfDeque<deque<int>&d>
{
    for(deque<int>::iterator it=d.begin();i!=d.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
void fuzhi()
{
    deque<int>d1;
    for(int i=0;i<10;i++)
    {
        d1.push_back(i);
    }    
    printfDeque(d1);
    
    //operator赋值 
    deque<int>d2;
    d2=d1;
    printfDeque(d2);
    
    //assign赋值
    deque<int>d3;
    d3.assign(d1.begin(),d1.end());
    printfDeque(d3);
    
    deque<int>d4;
    d4.assign(10,100);
    printfDeque(d4);
    
} 
int main()
{
     fuzhi();
     return 0;
}

3.deque大小操作

#include <iostream>
#include <cstring>
using namespace std;
#include <deque>
void printfDeque<deque<int>&d>
{
    for(deque<int>::iterator it=d.begin();i!=d.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
void daixao()
{
    deque<int>d1;
    for(int i=0;i<10;i++)
    {
        d1.push_back(i);
    }    
    printfDeque(d1);
    
    if(d1.empty())
        cout<<"d1为空"<<endl;
    else
    {
        cout<<"d1不为空" <<endl;
        cout<<"d1的大小为:"<<d1.size()<<endl; 
        //deque没用容器概念 
    }
    
    //重新指定大小
    d1.resize(15,1);
    printfDeque(d1);
    
    d1.resize(5);
    printfDeque(d1);
} 
int main()
{
     daxiao();
     return 0;
}

  1. deque插入删除

两端操作

#include <iostream>
#include <cstring>
using namespace std;
#include <deque>
void printfDeque<deque<int>&d>
{
    for(deque<int>::iterator it=d.begin();i!=d.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
void charu shanchu()
{
    deque<int>d1;
    //尾插
    d1.push_back(10); 
    d1.push_back(20);
     
    //头插
    d1.push_front(100);
    d1.push_front(200);
    printfDeque(d1);
    
    //尾删
    d1.pop_back();
    printfDeque(d1);
    
    //头删 
     d1.pop_front();
     printfDeque(d1);
} 
int main()
{
     charu shanchu();
     return 0;
}

指定位置

#include <iostream>
#include <cstring>
using namespace std;
#include <deque>
void printfDeque<deque<int>&d>
{
    for(deque<int>::iterator it=d.begin();i!=d.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
void charu()
{
    deque<int>d1;
    d1.push_back(10); 
    d1.push_back(20);
    d1.push_front(100);
    d1.push_front(200);
    printfDeque(d1);
    
    //insert插入
    d1.insert(d1.begin(),1000);
    printfDeque(d1);
    
    d1.insert(d1.begin(),2,10000);
    printfDeque(d1);
    
    //按照区间插入
    deque<int>d2;
    d2.push_back(1);
    d2.push_back(2); 
    d2.push_back(3); 
    d1.insert(d1.begin(),d2.begin(),d2.end());
    printfDeque(d1); 
} 
void shanchu()
{
    //删除 
    deque<int>d1;
    d1.push_back(10); 
    d1.push_back(20);
    d1.push_front(100);
    d1.push_front(200);
    deque<int>::iterator it = d1.begin();
    d1.erase(it);
    
    //按区间方式删除
    d1.erase(d1.begin(),d1.end());
    //或者
    d1.clear(); 
    printfDeque(d1);
}
int main()
{
     charu();
     shanchu(); 
     return 0;
}

  1. deque数据存取

#include <iostream>
#include <cstring>
using namespace std;
#include <deque>
void cunqu()
{
    deque<int>d;
    d.push_back(10); 
    d.push_back(20);
    d.push_back(30);
    d.push_front(100);
    d.push_front(200);
    d.push_front(300);
    //通过[]方式访问 
    for(int = 0;i<d.size();i++)
    {
        cout<<d[i]<<' ';
    }
    cout<<endl;
    
    //通过at方式访问
    for(int = 0;i<d.size();i++)
    {
        cout<<d.at(i)<<' ';
    }
    cout<<endl;
    
    cout<<"第一个元素为:"<<d.front()<<endl;
    cout<<"最后一个元素为:"<<d.back()<<endl;
} 
int main()
{
     cunqu();
     return 0;
}

  1. deque排序

#include <iostream>
#include <cstring>
using namespace std;
#include <deque>
#include <algorithm>
void printfDeque<deque<int>&d>
{
    for(deque<int>::iterator it=d.begin();i!=d.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
void paixu()
{
    deque<int>d;
    d.push_back(10); 
    d.push_back(20);
    d.push_back(30);
    d.push_front(100);
    d.push_front(200);
    d.push_front(300);
    printfDeque(d);
    //排序   默认排序规则 从小到大 升序
    //对于支持随机访问的迭代器的容器,都可以利用sort算法直接对其进行排序
    //vector容器也可以利用 sort进行排序 
    sort(d.begin(),d.end());
    cout<<"排序后:"<<endl;
    printfDeque(d);    
} 
int main()
{
     paixu();
     return 0;
}

stack容器

1.栈的概念

2.stack常用接口

#include <iostream>
#include <cstring>
using namespace std;
#include <stack>
#include <algorithm>
void zhan()
{
    stack<int>s;
    //入栈
    s.push(10); 
    s.push(20); 
    s.push(30); 
    s.push(40); 
    
    cout<<"栈的大小为:"<<s.size()<<endl;
    
    //只要栈不为空,查看栈顶,并且执行出栈操作
    while(!s.empty())
    {
        //查看栈顶元素
        cout<<"栈顶元素为:"<<s.top()<<endl;
        
        //出栈
        s.pop(); 
    } 
    
    cout<<"栈的大小为:"<<s.size()<<endl;
} 
int main()
{
     zhan();
     return 0;
}

queue容器

1.队列的基本概念

2.queue常用接口

#include <iostream>
#include <cstring>
using namespace std;
#include <queue>
#include <algorithm>
class person
{
    public:
        {
            person(string name,int age)
            this->m_Name = name;
            this->m_Age = age;
        }
        string m_Name;
        int m_Age;
}
void duilie()
{
    queue<person>q;
    //准备数据 
    person p1("唐僧",30); 
    person p1("孙悟空",1000); 
    person p1("猪八戒",900); 
    person p1("沙僧",800); 
    
    cout<<"队列大小为:"<<q.size()<<endl; 
    
    //入队
    q.push(p1); 
    q.push(p2); 
    q.push(p3); 
    q.push(p4);
    
     //判断只要队列不为空,查看对头,查看队尾,出队
     while(!q.empty())
     {
         //查看队头
        cout<<"队头元素——姓名:"<<q.front().m_Name<<"年龄:"<<q.front.m_Age<<endl; 
      
        //查看队尾 
        cout<<"队尾元素——姓名:"<<q.front().m_Name<<"年龄:"<<q.front.m_Age<<endl; 
      
          //出队
           q.pop(); 
      } 
      
      cout<<"队列大小为:"<<q.size()<<endl; 
    
} 
int main()
{
     duilie();
     return 0;
}

List容器

1.链表基本概念

2.list函数构造

#include <iostream>
#include <cstring>
using namespace std;
#include <list>
#include <algorithm>
void printfList(list<int>&L)
{
    for(list<int>::iterator it=L.begin();i!=L.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
void gouzao()
{
    //创建List容器
    list<int>L1;
    
    //添加数据
    L1.push_back(10); 
    L1.push_back(20); 
    L1.push_back(30); 
    L1.push_back(40);
    
    //遍历容器
    printfList(L1);
    
    //区间方式构造
    list<int>L2(L1.begin(),L1.endl); 
    printfList(L2);
    
    //拷贝构造
    list<int>L3(L2);
    printfList(L3);
    
    //n个elem
    list<int>L4(10,1000);
    printfList(L4); 
    
} 
int main()
{
     gouzao();
     return 0;
}

3.list赋值和交换

#include <iostream>
#include <cstring>
using namespace std;
#include <list>
#include <algorithm>
void printfList(list<int>&L)
{
    for(list<int>::iterator it=L.begin();i!=L.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
void fuzhi()
{
    //创建List容器
    list<int>L1;
    
    //添加数据
    L1.push_back(10); 
    L1.push_back(20); 
    L1.push_back(30); 
    L1.push_back(40);
    
    //遍历容器
    printfList(L1);
    
    //赋值
    list<int>L2;
    L2=L1;
    printfList(L2);
    
    list<int>L3;
    L3.assign(L2.begin(),L2.end());
    printfList(L3);
    
    list<int>L4;
    L4.assign(10,100);
    printfList(L4);
} 
void jiaohuan()
{
    list<int>L1;
    L1.push_back(10); 
    L1.push_back(20); 
    L1.push_back(30); 
    L1.push_back(40);
    
    list<int>L2;
    L2.assgin(10,100);
    
    cout<<"交换前:"<<endl;
    printfList(L1);
    printfList(L2);
    
    L1.swap(L2); 
    cout<<"交换后:"<<endl;
    printfList(L1);
    printfList(L2);
}
int main()
{
     fuzhi(); 
    jiaohuan();
     return 0;
}

4.list大小操作

#include <iostream>
#include <cstring>
using namespace std;
#include <list>
#include <algorithm>
void printfList(list<int>&L)
{
    for(list<int>::iterator it=L.begin();i!=L.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
void daxiao()
{
    //创建List容器
    list<int>L1;
    
    //添加数据
    L1.push_back(10); 
    L1.push_back(20); 
    L1.push_back(30); 
    L1.push_back(40);
    
    //遍历容器
    printfList(L1);
    
    //判断容器是否为空 
    if(L1.empty())
    {
        cout<<"L1为空"<<endl; 
    }
    else
    {
        cout<<"L1不为空"<<endl;
        cout<<"L1的元素个数:"<<L1.size()<<endl;
    }
    
    //重新指定大小
    L1.resize(10,10000);
    printfList(L1);
    
    L1.resize(5);
    printfList(L1); 
} 
int main()
{
     daxiao(); 
     return 0;
}

5.list插入删除

#include <iostream>
#include <cstring>
using namespace std;
#include <list>
#include <algorithm>
void printfList(list<int>&L)
{
    for(list<int>::iterator it=L.begin();i!=L.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
void charu shanchu()
{
    //创建List容器
    list<int>L;
    
    //尾插 
    L.push_back(10); 
    L.push_back(20); 
    L.push_back(30); 
    L.push_back(40);
    
    
    //头插
    L.push_front(100);
    L.push_front(200);
    L.push_front(300);
    
    //遍历容器  300 200 100 10 20 30
    printfList(L);
    
    //尾删 
    L.pop_back();
     //300 200 100 10 20
    printfList(L);
    
    //头删
    L.pop_front();
    //200 100 10 20
    printfList(L);
    
    //insert插入
    list<int>::iterator it = L.begin();
    L.insert(++it,1000);
    //200 1000 100 10 20
    printfList(L);
    
    //删除
    it = L.begin();
    L.erase(++it);
    //200 100 10 20
    printfList(L);
    
    //移除
    L.push_back(10000);
    L.push_back(10000);
    L.push_back(10000);
    L.push_back(10000);
    printfList(L);
    L.remove(1000);
    printfList(L); 
    
    //清空
    list.clear();
    L.push_back(10000);
} 
int main()
{
     charu shanchu(); 
     return 0;
}

6.list存取

#include <iostream>
#include <cstring>
using namespace std;
#include <list>
#include <algorithm>
void printfList(list<int>&L)
{
    for(list<int>::iterator it=L.begin();i!=L.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
void cunqu()
{
    //创建List容器
    list<int>L;
    
    //尾插 
    L.push_back(10); 
    L.push_back(20); 
    L.push_back(30); 
    L.push_back(40);
    
    //L1不可以用[]或者at访问list容器的元素,
    //原因是list本质是链表,不是用连续线性空间存储数据,迭代器也不支持连续访问
    
    cout<<"第一个元素为:"<<L.front()<<endl; 
    cout<<"最后一个元素为:"<<L.back()<<endl; 
    
    //验证迭代器是不支持随机访问的
    list<int>::iterator it = L.begin();
    i++;
    i--;//支持双向访问
    //it = it +1;//不支持随机访问 
} 
int main()
{
     cunqu(); 
     return 0;
}

7.list链表的反转

#include <iostream>
#include <cstring>
using namespace std;
#include <list>
#include <algorithm>
void printfList(list<int>&L)
{
    for(list<int>::iterator it=L.begin();i!=L.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
bool mycompare(int v1;int v2) 
{
    //降序 就让第一个数>第二个数
    return v1>v2; 
}
void pauxu fanzhuan()
{
    //创建List容器
    list<int>L;
    
    //尾插 
    L.push_back(20); 
    L.push_back(10); 
    L.push_back(50); 
    L.push_back(40);
    L.push_back(50);
    
    cout<<"反转前:"<<Endl; 
    printfList(L);
    
    //反转
    L.reverse();
    cout<<"反转后:"<<Endl;
    printfList(L); 
    
    //排序
    cout<<"排序前:"<<Endl; 
    printfList(L);
    
    //所有不支持随机访问的迭代器,不能用标准算法 
    //不支持随机访问迭代器的容器,内部会提供一些对应的算法
    
    L.sort(); //默认排序规则 从小到大 升序 
    cout<<"排序后:"<<Endl; 
    printfList(L);
    
    L.sort(mycompare);
    printfList(L);
    
int main()
{
     paixu fanzhuan(); 
     return 0;
}

set/multiset

  1. set/multiset构造赋值

#include <iostream>
#include <cstring>
using namespace std;
#include <set>
#include <algorithm>
void printfSet(set<int>&s)
{
    for(set<int>::iterator it=s.begin();i!=s.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
void gouzao()
{
    //创建List容器
    set<int>s;
    
    //插入数据 只用insert方式
    s.insert(10); 
    s.insert(40); 
    s.insert(30); 
    s.insert(20); 
    s.insert(30); 
    
    //遍历容器 
    //set容器特点:所用容器在插入的时候会自动排序
    //set容器不允许插入重复值 
    printfSet(s);
    
    //拷贝构造
    set<int>s1(s);
    printfSet(s1);
    
    //赋值
    set<int>s2;
    s2 = s1;
    printfSet(s2);
int main()
{
     gouzao(); 
     return 0;
}

2.set大小和交换

#include <iostream>
#include <cstring>
using namespace std;
#include <set>
#include <algorithm>
void printfSet(set<int>&s)
{
    for(set<int>::iterator it=s.begin();i!=s.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
void daxiao jiaohuan()
{
    //创建List容器
    set<int>s;
    
    //插入数据 只用insert方式
    s.insert(10); 
    s.insert(20); 
    s.insert(30); 
    s.insert(40); 
    
    printfSet(s);
    
    //判断是否为空
    if(s.empty()) 
    {
        cout<<"s为空"<<endl; 
    }
    else
    {
        cout<<"s不为空"<<endl;
        cout<<"s的大小为:"<<s.size()<<endl; 
    }
    
    //交换
    set<int>s1(s);
    s1.insert(100); 
    s1.insert(300); 
    s1.insert(200); 
    s1.insert(400);
    
    cout<<"交换前:"<<endl;
    printfSet(s);
    printfSet(s1);
    
    cout<<"交换后:"<<endl;
    s1.swap(s2);
    printfSet(s);
    printfSet(s1);
     
int main()
{
     daxiao jiaohuan(); 
     return 0;
}

3.set插入删除

#include <iostream>
#include <cstring>
using namespace std;
#include <set>
#include <algorithm>
void printfSet(set<int>&s)
{
    for(set<int>::iterator it=s.begin();it!=s.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
void charu shanchu()
{
    //创建List容器
    set<int>s;
    
    //插入数据 只用insert方式
    s.insert(10); 
    s.insert(20); 
    s.insert(30); 
    s.insert(40); 
    
    printfSet(s);
    
    //删除
    s1.erase(s.begin());
    printfSet(s);
    
    //删除的重载版本
    s.erase(30);
    printfSet(s);
    
    //清空
    //s.erase(s.begin(),s.end());
    s.clear(s);
    printfSet(s);
int main()
{
     charu shanchu(); 
     return 0;
}

4.set查统计

#include <iostream>
#include <cstring>
using namespace std;
#include <set>
#include <algorithm>
void printfSet(set<int>&s)
{
    for(set<int>::iterator it=s.begin();it!=s.end();it++)
    {
        cout<<*it<<" ";
    }
    cout<<endl;
}
void charu shanchu()
{
    //创建List容器
    set<int>s;
    
    //插入数据 只用insert方式
    s.insert(10); 
    s.insert(20); 
    s.insert(30); 
    s.insert(40); 
    
    printfSet(s);
    set<int>::iterator pos = s.find(30);
    if(pos!=s.end())
    {
        cout<<"找到元素:"<<*pos<<endl;
    }
    else
    {
        cout<<"未找到元素"<<endl;
    }
    
    //统计
    int num = s.count(30);
    //对于set而言 统计结果要么是0 要么是1 
    cout<<"num = "<<num<<endl; 
int main shanchu()
{
     charu(); 
     return 0;
}

5.set和multiset区别

map容器

1.map构造与赋值

#include <iostream>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
void printMap(map<int,int>&m)
{
    for(map<int,int>::iterator it = m.begin();it!=m.end();it++)
    {
        cout<<"ket = "<<(*it).frist<<"value = "<<it->second<<endl;
    }
    cout<<endl;
}
void gouzao()
{
    //构造maop容器 
    map<int,int>m;
    
    m.insert(pari<int,int>(1,10));
    m.insert(pari<int,int>(2,20));
    m.insert(pari<int,int>(3,30));
    m.insert(pari<int,int>(4,40));
    
    printMap(m);
    
    //拷贝构造
    map<int,int>m2(m); 
    printMap(m2);
    
    //赋值
    map<int,int>m3;
    m3 = m2;
    printMap(m3); 
}
int main()
{
     gouzao(); 
     return 0;
}

2.map容器大小交换

#include <iostream>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
void printMap(map<int,int>&m)
{
    for(map<int,int>::iterator it = m.begin();it!=m.end();it++)
    {
        cout<<"ket = "<<(*it).frist<<"value = "<<it->second<<endl;
    }
    cout<<endl;
}
void daxiao jiaohuan()
{
    //构造maop容器 
    map<int,int>m;
    
    m.insert(pari<int,int>(1,10));
    m.insert(pari<int,int>(2,20));
    m.insert(pari<int,int>(3,30));
    
    if(m.empty())
    {
        cout<<"m为空"<<endl;
    }
    else
    {
        cout<<"m不为空"<<endl;
        cout<<"m的大小为:"<<m.size()<<endl; 
    }
    printMap(m);
    
    map<int,int>m2;
    
    m2.insert(pari<int,int>(4,100));
    m2.insert(pari<int,int>(5,200));
    m2.insert(pari<int,int>(6,300));
    
    cout<<"交换前:"<<endl;
    printMap(m);
    printMap(m2);
    
    cout<<"交换后:"<<endl;
    m.swap(m2);
    printMap(m);
    printMap(m2);
}
int main()
{
     daxiao jiaohuan(); 
     return 0;
}

3.map插入删除

#include <iostream>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
void printMap(map<int,int>&m)
{
    for(map<int,int>::iterator it = m.begin();it!=m.end();it++)
    {
        cout<<"ket = "<<(*it).first<<"value = "<<it->second<<endl;
    }
    cout<<endl;
}
void charu shanchu()
{
    map<int,int>m;
    
    //第一种 
    m.insert(pari<int,int>(1,10));
    
    //第二种 
    m.insert(make_pair(2,20));
    
    //第三种 
    m.insert(map<int,int>::value_type(3,30));
    
    //第四种    不建议插入 但可以利用key访问value 
    //cout<<m[4]<<<endl; 
    m[4] = 40;
    
    printMap(m);
    
    //删除
    m.erase(m.begin()) //按照key删除 
    printMap(m);
    
    //清空 
    //m.erase(m.begin(),m.end());
    m.clear()
    printMap(m);
    
int main()
{
     charu shanchu(); 
     return 0;
}

4.map查找统计

#include <iostream>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
void printMap(map<int,int>&m)
{
    for(map<int,int>::iterator it = m.begin();it!=m.end();it++)
    {
        cout<<"ket = "<<(*it).frist<<"value = "<<it->second<<endl;
    }
    cout<<endl;
}
void chazhao tongji()
{
    //查找 
    map<int,int>m;
    m.insert(pari<int,int>(1,10));
    m.insert(pari<int,int>(2,20));
    m.insert(pari<int,int>(3,30));
    
    map<int,int>::iterator pos = m.find(3);
    if(pos!=m.end())
    {
        cout<<"查到了元素key = "<<(*pos).first<<"value = "<<pos->second<<endl; 
    }
    else
    {
        cout<<"未找到元素"<<endl;
    }
    
    //统计
    //map不允许插入重复的key ,count要么是0要么是1 
    int num = m.count(3);
    cout<<"num = "<<num<<endl; 
int main()
{
     chazhao tongji(); 
     return 0;
}

5.map容器排序

#include <iostream>
#include <cstring>
#include <map>
#include <algorithm>
using namespace std;
class MyCompare
{
public:
    bool operator()(int v1,int v2)
    {
        //降序
        return v1>v2; 
    }
}
void paixu()
{
    map<int,int,MyCompare>m;
    m.insert(make_pair(1,10));
    m.insert(make_pair(2,20));
    m.insert(make_pair(5,50));
    m.insert(make_pair(3,30));
    m.insert(make_pair(4,40));
    
    for(map<int,int,MyCompare>::iterator it = m.begin();it!=m.end();it++)
    {
        cout<<"ket = "<<(*it).frist<<"value = "<<it->second<<endl;
    }
    
int main()
{
     paixu(); 
     return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值