1。解释模版参数与函数参数之间的一个重要区别?
模板参数不仅可以传递变量和值,还可以传递类型表达式。
template <class T> T power (T a, int exp){
T ans = a;
while (--exp > 0){
ans *= a;
}
return (ans);
}
[temp-demo.cpp]
int main(){
Complex z(3,4),zl;
Fraction f(5,6),f1;
int n(19);
z1 = power(z,3);/*第1次实例化*/
f1 = power(f,4);/*第2次实例化*/
z1 = power<Complex>(n,4);
z1 = power(n,5);
}
2。实例化某个模版函数意味着什么?描述一种实例化的方法。
每当编译器首次识别出使用一个组特定的参数类型来调用模板函数时,就称此模板进行了实例化。
3。通常来说需要将模板定义放在头文件中,这是为什么?
这是因为编译器需要这些定义来根据模板声名生成代码。同样也要注意所需要的声明代码:template<class T>这些代码必须出现在任何在名字中使用
此模板参数的类或者函数的定义之前。
4。QT容器类用来存储值类型。哪种事物不适与使用值集合中的值进行存储?
5。哪种容器提供从键到值的映射?至少列举两种,然后讲述他们之间的区别。
QMap:是一个存储键-值对的,有序的关联容器,主要设计用来快速查找与某个键关联的值以及简化插入操作。
QHash:是一个使用哈希表来加快键的查找的关联容器。它提供了非常快速的查找和插入操作。但是搜索速度较慢,也没有进行分类。
6。一个容器管理其堆对象的含义是什么?一个包含堆对象指针的容器怎样变成“管理容器”?
对于QT的指针容器,可以使用qDeleteALL(container)这个算法来调用容器内所有元素的delete操作。
当一个容器对其中的对象仅仅提供索引或引用导航机制的时候,称此容器为聚合容器,它仅仅复制容器中的对象的引用。当删除聚合容器时,也仅仅移
除其引用,这对容器底层毫无影响。
stack. ---------------------------------------------------- #include <qstd.h> template <class T>class Node { public: Node(T invalue): m_Value(invalue), m_Next(0){} ~Node(); T getValue() const {return m_Value; } void setValue(T value){m_Value = value;} Node<T>* getNext() const {return m_Next;} void setNext(Node<T>* next){m_Next = next;} private: T m_Value; Node<T>* m_Next; }; template <class T> Node<T>::~Node(){ template <class T> class Stack {
template <class T> T Stack<T>::pop() { |
main.cpp int main(){ while (intstack.count()){ |