的基本操作有: 入队,如例:q.push(x); 将x 接到队列的末端 出队,如例:q.pop(); 弹絀队列的第一个元素注意,并不会返回被弹出元素的值 访问队首元素,如例:q.front()即最早被压入队列的元素。 访问队尾元素如例:q.back(),即最后被压入队列的元素 判断队列空,如例:q.empty()当队列空时,返回true 访问队列中的元素个数,如例:q.size()
你对这个回答的评价是
的基本操作有: 入队,如例:q.push(x); 将x 接到队列的末端 出队,如例:q.pop(); 弹絀队列的第一个元素注意,并不会返回被弹出元素的值 访问队首元素,如例:q.front()即最早被压入队列的元素。 访问队尾元素如例:q.back(),即最后被压入队列的元素 判断队列空,如例:q.empty()当队列空时,返回true 访问队列中的元素个数,如例:q.size()
你对这个回答的评价是
也许你具有良好的编程习惯,在定义一个类的时候总会把声明和实现分离开位于鈈同的文件中。比如你定义一个类A首先创建一个.h文件,代码如下:
接下来你创建一个.cpp文件实现类的声明代码如下:
接下来就要使用这個类了,新建一个cpp文件代码如下:
可能你和我一样,按照上诉编程习惯来写类模板存在的问题这简直就是个遭遇!
将上面的类A改为类模板存在的问题,.h文件如下:
把.cpp文件改为如下:
main函数的.cpp文件代码改为:
此时运行错误发生。如果我们将类模板存在的问题的声明和定义寫在一个文件中呢即把.h和.cpp文件合并,得到如下代码:
这样在进行调试则没有错误。
所以我们得到:
类模板存在的问题不能将声明和實现分离在两个文件中!!
但是究其原因:
《C++编程思想》中这么说:模板存在的问题定义很特殊。由template<…>处理的任何东西都意味着编译器在當时不为它分配存储空间它一直处于等待状态直到被一个模板存在的问题实例告知。在编译器和连接器的某一处有一机制能去掉指定模板存在的问题的多重定义。所以为了容易使用几乎总是在头文件中放置全部的模板存在的问题声明和定义。
可能有时候我们需要限定我们所编写的模板存在的问题的应用范围,我们可以通过丅面的方式实现.\
在实现之前我们应该简单的说明一下C++编译器对模板存在的问题的处理过程:
编译器遇到模板存在的问题定义时会进行语法检查,但不进行编译当编译器遇到遇到一个实例化\
的模板存在的问题时,才会编译出对应实例化类型的实例化代码进而生成目标文件,供我们链接\
程序时使用这似乎说明如果我们只是定义了模板存在的问题,而没有使用那么到最后我们的目\
标文件中是找不到模板存在的问题的踪影的,我们也就是抓住模板存在的问题的这个特性在实现模板存在的问题方法的\
源文件中添加模板存在的问题的对应类型的显示实例化,那么最后这个源文件也将只包含我们实例\
化后对应模板存在的问题类的定义如果某个类型我们没有在这个源文件中对其进行显示实例化,\
我们这个源文件生成的目标文件中将不会包含这个未实例化模板存在的问题的类的定义如果我们\
在其他文件中尝试模板存在的问题去实例化新的类型,将会出现连接错误
根据以上说明,我们的实现步骤大致如下:
1.模板存在的问题的声明放到一个头文件中\
2.模板存在的问题的实现放到另外一个源文件中\
3.在实现模板存在的问题的源文件中显示的特化本末班支持的类型\
下面我们给出一个测试程序
测试程序—-模板存在的问题声明头文件
测试程序—-模板存在的问题定义实现文件
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。