数字相比较的模板
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;










网友评论