美文网首页
第九章 模板,迭代器,list,map,vector删除指定元素

第九章 模板,迭代器,list,map,vector删除指定元素

作者: ie大博 | 来源:发表于2016-11-14 20:29 被阅读0次

数字相比较的模板

using namespace std;
template<class X>//声明一个空类型,X.一个抽象的数据类型。
X Max(X a,X b)//整形、浮点型都可以。通过实参类型可以得到真正的函数。
{
    return (a<b?a:b);
}
int main()
{
    int x1=10,x2=20;
    cout<<Max<int>(x1,x2)<<endl;//这里的<>可以省略
}

类模板

using namespace std;
template<class X,class Y>
class Test
{
    X m_t1;//虚拟类型
    Y m_t2;
public:
    Test(X t1,Y t2)
    {
        m_t1=t1;
        m_t2=t2;
    }
    void show()
    {
        cout<<"T1 ="<<m_t1<<"T2 = "<<m_t2<<endl;
    }

};
int main()
{
    Test<int,char> t(10,'s');//这里的<>不能省略
    t.show();
}

类模板的升级:类外函数的使用

template<class X,class Y>
class Test
{
    X m_t1;
    Y m_t2;
public:
    Test(X t1,Y t2)
    {
        m_t1=t1;
        m_t2=t2;
    }
    void show()
    {
        cout<<"T1 ="<<m_t1<<"T2 = "<<m_t2<<endl;
    }
    void  print();//在类中声明函数

};
template<class X,class Y>
void Test<X,Y> :: print()//这个是和Test的相关的函数,这里的<X,Y>不能缺少
{
    cout<<"T1 ="<<m_t1<<"T2 = "<<m_t2<<endl;
}
int main()
{
    Test<int,char> t(10,'s');//这里的<>不能省略
    t.show();
    t.print();
}

迭代器

关键字iterator,vector

using namespace std;
vector<int> v;//定义一个v,插入int型变量
int main()
{
/*  for(int i=0;i<11;i++)
    {
        v.push_back(i);//尾插,新建立类似于链表的东西
    }*/
    int elem;
    while(cin>>elem)
        v.push_back(elem);
    for(int j=0;j<v.size();j++)
    {
        cout<<v[j]<<"  ";//在里面放具体数值
    }
        cout<<endl;
    for(vector<int>::iterator it=v.begin();it<v.end();it++)//iterator是一个迭代器,
是vector类型下面的,中见不能少<int>,it是指针,begin和end是迭代器的首地址和尾地址
    {
        cout<<*it<<"\t";//这个\t还必须加生“”
    }
    cout<<endl;
*********************************************************************************
    for(vector<int>::reverse_iterator it=v.rbegin();it<v.rend();it++)//反向迭代器,
reverse是标志,rbegin是上一个end,rend是begin。
    {
        cout<<*it<<"\t";//这个\t还必须加生“”
    }
    cout<<endl;
}

指针和迭代器关于const的应用

using namespace std;

int *p1;                 iterator i1;

const int *p2;           const_iterator i2;//指向的内容不能变

int const *p3;          const iterator i3;//指针不能变

const int *const p4;    const const_iterator i4;//都不能变

vector的一些使用案例

using namespace std;
void show(vector<int> vi)
{
    vector<int>::iterator it;
    it=vi.begin();
    while(it!=vi.end())
    cout<<*it++<<" ";
    cout<<endl;
}
int main()
{
    vector<int> vi(3,90);//插入3个90
    show(vi);
    int a[5]={3,4,5,6,7};
    vi.insert(vi.begin(),a,a+5);//头插,五个数
    show(vi);
    vi.push_back(100);//尾插
    show(vi);
    cout<<"size:"<<vi.size()<<endl;//求vi的size
    vi.assign(5,99);
    show(vi);
    cout<<"size:"<<vi.size()<<endl;

}

list 的应用

#include<list>
int main()
{
    int cpp[5]={3,6,1,7,5};
    int java[8]={1,2,3,4,5,6,7,8};
    int Unix[4]={5,2,3,11};
    list<int> li;//list是容器
    li.insert(li.begin(),cpp,cpp+5);
    li.insert(li.begin(),java,java+8);
    li.insert(li.begin(),Unix,Unix+4);
    li.sort();//排序
    li.unique();//去重,要和排序一起使用
    li.reverse();//翻转,就是原本是从小到大排序,后来就从大到小

    list<int>::iterator //iterator是list里面的一个类,是迭代器
    it=li.begin();
    while(it!=li.end())
    cout<<*it++<<' ';
    cout<<endl;
}
#include<list>
int main()
{
    list<int> l1;
    int a[5]={3,4,5,6,7};
    list<int> l2(a,a+5);
    cout<<"l1.size():"<<l1.size()<<endl;
    cout<<"l2.size():"<<l2.size()<<endl;
    list<int>::iterator it;//创建一个迭代器,它的名字叫it
    for(it=l2.begin();it!=l2.end();it++)
    cout<<*it<<' ';

    it=l2.begin();
    it++;//it指向第二个
    l2.erase(it);删除第二个
    l2.insert(l2.begin(),100);//头插
    l2.insert(l2.end(),200);//尾插
    for(it=l2.begin();it!=l2.end();it++)
    cout<<*it<<' ';
    cout<<endl;
}

map

int main()
{
    map<int,string>mis;

    mis.insert(make_pair(62,"东方不怕"));//创建对象
    mis.insert(make_pair(32,"岳不群"));
    mis.insert(make_pair(36,"林平之"));

    mis[20]="劳德罗";//这里的20不是下标,就是和上面的int型一样
    map<int,string>::iterator it;
    it = mis.begin();

    while(it!=mis.end())
    {
        cout<<it->first<<":"<<it->second<<endl;
        ++it;
    }
    
}

用vector删除指定的元素

using namespace std;
#include<vector>
#include<map>
#include<string>
vector<int>num;
int main()
{
    
    int element;
    while(cin>>element)
    {
        num.push_back(element); 
    }
    for(vector<int>::iterator it1 = num.begin();it1<num.end();)//这一个for循环是标准的
删除代码,可以删除所有等于5的数据
    {
        if(*it1==5)
        {
            it1=num.erase(it1);
        }
        else
                {
                      it1++;
                 }
    }
    for(vector<int>::iterator it2 = num.begin();it2<num.end();it2++)
    {
        cout<<*it2<<' ';
    }
    cout<<endl;
    return 0;
}

const在类中的使用

class Test
{
    int m_t;
public:
    Test(){}//这个还不能省略
    void lianxi()const  //const加这个位置表示成员变量不能改变
    {
        cout<<"alex is a cool boy"<<endl;
    }
    void lianxi()
    {
        cout<<"lianxi"<<endl;
    }
};

int main()
{
    const Test t1;//调用的时候要在定义变量前加上const。
    t1.lianxi();
    Test t2;
    t2.lianxi();
    return 0;

相关文章

网友评论

      本文标题:第九章 模板,迭代器,list,map,vector删除指定元素

      本文链接:https://www.haomeiwen.com/subject/ikphpttx.html