HTML tutorial
CSS3 tutorial
Bootstrap tutorial
JavaScript tutorial
JQuery tutorial
AngularJS tutorial
React tutorial
NodeJS tutorial
PHP tutorial
Python tutorial
Python3 tutorial
Django tutorial
Linux tutorial
Docker tutorial
Ruby tutorial
Java tutorial
C tutorial
C ++ tutorial
Perl tutorial
JSP tutorial
Lua tutorial
Scala tutorial
Go tutorial
ASP.NET tutorial
C # tutorial
Templates are generic programming, generic programming that is a stand-alone manner to any particular type of writing code.
Template to create a generic class or function blueprint or formula. Library containers, iterators, and algorithms for example, are examples of generic programming, they all use the concept of templates.
Each container has a single definition, such asvectors, we can define a number of different types of vectors, such as vector <int>orvector <string>.
You can use templates to define the functions and classes, let's take a look at how to use.
The general form of the template function is defined as follows:
template <class type> ret-type func-name(parameter list) { // 函数的主体 }
Here, type is a function of the data types used placeholder names. The name can be used in the function definition.
Here is an example of a function template returns the maximum number of two kinds:
#include <iostream> #include <string> using namespace std; template <typename T> inline T const& Max (T const& a, T const& b) { return a < b ? b:a; } int main () { int i = 39; int j = 20; cout << "Max(i, j): " << Max(i, j) << endl; double f1 = 13.5; double f2 = 20.7; cout << "Max(f1, f2): " << Max(f1, f2) << endl; string s1 = "Hello"; string s2 = "World"; cout << "Max(s1, s2): " << Max(s1, s2) << endl; return 0; }
When the above code is compiled and executed, it produces the following results:
Max(i, j): 39 Max(f1, f2): 20.7 Max(s1, s2): World
As we define function templates, we can define the class templates. The general form of a generic class declaration is as follows:
template <class type> class class-name { . . . }
Here, type is a placeholder type name can be specified in the class is instantiated.You can use a comma-separated list to define multiple generic data types.
The following example defines a class Stack <>, and implements the generic approach to stack pop operations on elements:
#include <iostream> #include <vector> #include <cstdlib> #include <string> #include <stdexcept> using namespace std; template <class T> class Stack { private: vector<T> elems; // 元素 public: void push(T const&); // 入栈 void pop(); // 出栈 T top() const; // 返回栈顶元素 bool empty() const{ // 如果为空则返回真。 return elems.empty(); } }; template <class T> void Stack<T>::push (T const& elem) { // 追加传入元素的副本 elems.push_back(elem); } template <class T> void Stack<T>::pop () { if (elems.empty()) { throw out_of_range("Stack<>::pop(): empty stack"); } // 删除最后一个元素 elems.pop_back(); } template <class T> T Stack<T>::top () const { if (elems.empty()) { throw out_of_range("Stack<>::top(): empty stack"); } // 返回最后一个元素的副本 return elems.back(); } int main() { try { Stack<int> intStack; // int 类型的栈 Stack<string> stringStack; // string 类型的栈 // 操作 int 类型的栈 intStack.push(7); cout << intStack.top() <<endl; // 操作 string 类型的栈 stringStack.push("hello"); cout << stringStack.top() << std::endl; stringStack.pop(); stringStack.pop(); } catch (exception const& ex) { cerr << "Exception: " << ex.what() <<endl; return -1; } }
When the above code is compiled and executed, it produces the following results:
7 hello Exception: Stack<>::pop(): empty stack