C++ STL中的简单知识点概要

本文详细介绍了C++标准模板库(STL)中的List和Vector的使用方法,包括排序、迭代器操作、内存管理等内容,并提供了丰富的代码示例。
    //list知识点:
    {
        list<int> list1;
        int num1 = 3, num2 = 5;
        int length = 0;
        int sum = 0;
        list1.push_back(num1);//在list的后面插入;
        list1.push_front(num2);//在list的前面插入;
        list1.sort();//这个函数用于对列表进行升序排序;
        list1.unique();//去除列表中的重复信息;
        length = list1.size();

        sum = accumulate(list1.begin(),list2.end(),0);//函数accumulate包含在头文件#include<numeric>中

        //迭代器
        list<int>::iterator max_ele_addr;
        list<int>::iterator min_ele_addr;
        max_ele_addr = max_element(list1.begin(),list1.end());//获取到列表中最大值的位置;
        min_ele_addr = min_element(list1.begin(),list1.end());//获取到列表中最小值的位置;
        cout<<*max_ele_addr<<endl;//星号表示解锁迭代器的值;

        //反向迭代器
        list<int>::reverse_iterator riter;
        for(riter = list1.rbegin(); riter != list1.rend(); riter++)
        {
            cout<<*riter<<'\t';
        }
    }

    //STL排序:
    {
        int a[20] = {};
        sort(a,a+20);//也是STL中的排序,存在于#include<algorithm>中;

        //实现降序
        bool compare(int a, int b)
        {
            return a>b;
        }
        sort(a, a+20, compare);

        //STL自己的排序函数:
        sort(begin,end,greater<int>());//这里,begin表示存储信息的首位置,end表示存储信息的尾位置。
                                       //less<type>()          <
                                       //less_equal<type>()    <=
                                       //greater_equal<type>() >=
                                       //sort在头文件algorithm中,greater等在头文件functional中。
    }

    //new的用法:
    {
        int howmany = 3;
        int *num = new int[howmany];
        for(int iter = 0; iter < howmany; iter++)
            cin>>num[iter];

        delete []num;
    }

    //vector的用法:
    {
        int num = 5;
        string str;

        //vector定量初始化以及插入;
        vector<string> vec1(num,"");//开辟有num个存储空间的向量vec1,并对每个存储空间进行初始化;
        vector<string>::iterator vec1_iter = vec1.begin();//向量迭代器;
        for(int iter = 0; iter < num; iter++)
        {
            cin>>str;
            vec1.insert(vec1_iter+iter,str);//在迭代器vec1_iter+iter的位置插入值str;
        }

        //vector不定量初始化
        vector<string> vec2;
        cout<<vec2.size()<<endl;//vec2的存储尺度为0,但是可以动态变化;
        for(int iter = 0; iter < num; iter++)
        {
            cin>>str;
            vec2.push_back(str);
        }
        //迭代器输出
        for(vector<string>::iterator vec2_iter = vec2.begin(); vec2_iter != vec2.end(); vec2.iter++)
        {
            cout<<*vec2_iter<<"\t";
        }
        //索引输出
        for(int iter = 0; iter < num; iter++)
        {
            cout<<vec2[iter]<<"\t";
            cout<<vec2.at(iter)<<endl;//这是at()函数;
        }

        //二维向量:
        int size1 = 5;
        int size2 = 6;
        string str;
        vector<vector<string> > Array(size1,vector<string>(size2,""));//定义二维向量,尺度为size1*size2,并初始化所有元素为"";
        vector<vector<string> > Array(size1,vector<string>(size2));//定义二维向量,尺度为size1*size2;
        for(int iter_dim1 = 0; iter_dim1 < size1; iter_dim1++)
            for(int iter_dim2 = 0; iter_dim2 < size2; iter_dim2++)
            {
                cin>>str;
                Array[iter_dim1].push_back(str);
            }
        //注:二维向量如果确定了维度,并初始化,则不应用push_back(),而应该用=赋值,这样保证其尺度不变。


        //定义二维向量,不确定维度;
        vector<vector<int> >vv;
        for(int c = 1; c <= 3; c++)
            vv.push_back(vector<int>(c,0));//每个第一维插入由c个0构成的一维向量

        //也可以后续设置维度size1*size2
        vv.resize(size1);
        for(int iter_dim1 = 0; iter_dim1 < size1; iter_dim1++)
            vv[iter_dim1].resize(size2);

        //定义第一维为size1的二维向量;
        vector<vector<int> > vv(size1);//定义了一个有mode行的二维向量

        //定义二维向量,并且元素全部初始化为零:
        vector<vector<int> > Array(size1,vector<int>(size2,0));

        //向量清空:
        vec1.clear();
        Array.clear();
        //释放内存:
        vector<string>().swap(vec1);
        vector<vector<int> >().swap(Array);
        //vector内容更新:
        vector<int>::iterator new_add = vec1.erase(vec1.begin());//删除vec1第一个位置上的内容,返回下一个位置的地址。
        //也可以删除一个区间内的内容
        //vector<int>::iterator new_add = vec1.erase(vec1.begin(),vec1.begin()+10);//删除区间的内容,返回删除后下一个位置的地址。
        //删除后更新内容:
        vector<int>(vec1).swap(vec1);

        //构造空二维向量:
        vector<int> singe_vec;
        vector<vector<int> > double_vec;
        double_vec.push_back(singe_vec);


        //一维向量排序:
        vector<int> sort_vec;
        int ele;
        for(int iter = 0; iter < 10; iter++)
        {
            cin>>ele;
            sort_vec.push_back(ele);
        }
        sort(sort_vec.begin(),sort_vec.end(),greater<int>());
    }

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值