编程语言
首页 > 编程语言> > C++学习笔记之模板篇

C++学习笔记之模板篇

作者:互联网

一、模板

不管是函数模板还是类模板,在未初始化前都是不占用内存的。  另外一般来说模板代码不能分开编译,即不能分开写成.h文件和.c文件,需要写成一个文件。

函数模板

关键字:

1.类型作为模板参数
举个例子:

templateT max(T a,T b)
{
	return (a>b)?a:b;
}

int ival = max(100,99);

2.变量作为模板参数
举个例子:

templatevoid display()
{
	cout<<size<<endl;
}

display();

3.多参数函数模板
举个例子

templatevoid display(T t,C c)
{
	cout<<t<<c<<endl;
}

int a = 666;
string str = "marsggbo";
dispaly(a,str);

4.数据类型和变量混用
还是举个栗子:

templatevoid display(T t)
{
	int i = 0;
	while(i++<size)
	{
		cout<<t<<endl;
	}
}

dispaly(6);

类模板

templateclass A
{
public:
    A(T a);
    T display()
    {
        return A.a;
    }
private:
    T a;
}

每定义一个成员函数时都需要在前面加上template关键字,另外在类名后还需要加上类型,即  ,举个栗子:

templateA::A(T x)
{
    A.a = x;
}

templateT A::display()
{
...
}

实例化类模板

int main(void)
{
    Atest;
    test.display();
    
    return 0;
}

二、标准模板库

1. vector

vector初始化

vector常用函数
特别注意,end() 返回的是向量迭代器末元素的下一个元素,所以如果要访问最后一个元素,表达式是这样的:  *(--vector.end()) ,(ps:注意前面有个*号)

代码示例:
记得引入vector头文件

#include#includeusing namespace std;

int main (void)
{
    vectorvec(6,6);   // 初始化为6个6
    vec.push_back(5);   // 在末尾插入一个数据
    cout<<vec.size()<<endl; //vector的长度(数据数量)
    vec.pop_back();     // 删除末尾的一个数据
    cout<<vec.size()<<endl;

    // 遍历
    for(int i=0;i<vec.size();i++)
    {
        cout<<vec[i]<>>
7
6
6
6
6
6
6
6

2.迭代器

迭代器相当于指针,要想访问数据,需要加上*号
直接看栗子吧

int main(void)
{
    vectorvec(2,"hello ");
    vec.push_back("marsggbo");
    vector::iterator citer = vec.begin();
    cout<<*(--vec.end())<<endl; 
    for(;citer!=vec.end();citer++){
    	cout<< *citer << endl;
    }
    	
    return 0;
} 
>>>
marsggbo
hello
hello
marsggbo

3.链表list

注意链表遍历的时候不能使用取下标的方式,只能通过迭代器进行遍历。

int main(void)
{
	listt;
	t.push_back(6);
	t.push_back(65);
	t.push_back(66);
		
	list::iterator itor = t.begin();
	for(;itor!=t.end();itor++)
	{
		cout<<*itor<<endl;
	}
	return 0;
}

4.映射map

这个有点类似于Python中的字典。使用的关键字是map和pair

map
使用示例:

int main(void)
{
	mapm;
	pairp1(666,"marsggbo");
	pairp2(222,"hexin");
	m.insert(p1);
	m.insert(p2);
	
	cout<<m[666]<<endl;
	cout<<m[222]<>>
marsggbo
hexin

map的遍历方法:(还是以上面的例子做基础)

int main(void)
{
	mapm;
	pairp1(666,"marsggbo");
	pairp2(222,"hexin");
	m.insert(p1);
	m.insert(p2);
	
	map::iterator itor = m.begin();
	for(;itor!=m.end();itor++)
	{
	    cout<< itor->first <<":";     // 输出键
	    cout<< itor->second << endl;    // 输出值
	}
} 

>>>
222:hexin
666:marsggbo


标签:int,void,笔记,itor,C++,marsggbo,main,模板
来源: https://blog.51cto.com/u_15187743/2747249