C でテンプレートと汎用プログラミング機能を実装するにはどうすればよいですか?
はじめに:
C のテンプレートおよび汎用プログラミング機能は、この言語の重要な機能の 1 つです。テンプレートと汎用プログラミングを通じて、より多用途で柔軟かつ効率的なコードを作成できます。この記事では、テンプレート関数とテンプレート クラスの定義と使用法、一般的に使用されるアルゴリズムとデータ構造をジェネリック プログラミングで実装する方法など、C でのテンプレートとジェネリック プログラミングについて紹介します。
1. テンプレート関数の定義と使用
テンプレート関数は、複数のデータ型に適用できる関数です。テンプレート関数を使用すると、より一般的なコードを記述し、コードの重複を減らすことができます。以下は、テンプレート関数の定義と使用のためのサンプル コードです。
#include <iostream> // 模板函数的定义 template <typename T> T Max(T a, T b) { return (a > b) ? a : b; } int main() { int num1 = 10; int num2 = 15; std::cout << "Max of " << num1 << " and " << num2 << " is: " << Max(num1, num2) << std::endl; double num3 = 3.14; double num4 = 2.71; std::cout << "Max of " << num3 << " and " << num4 << " is: " << Max(num3, num4) << std::endl; return 0; }
上記のコードでは、template <typename T># を使用して、テンプレート関数
Max## を定義します。 ###。この関数は複数のデータ型 (int、double など) に適用でき、2 つの数値のうち大きい方を返します。 main
関数では、Max
関数を使用して、2 つの整数と 2 つの浮動小数点数の最大値をそれぞれ求めます。 2. テンプレート クラスの定義と使用
#include <iostream> // 模板类的定义 template <typename T> class Stack { private: T* data; // 用于存储数据的数组 int size; // 栈的大小 int top; // 栈顶的索引 public: // 构造函数,对栈进行初始化 Stack(int stackSize) { size = stackSize; data = new T[size]; top = -1; } // 析构函数,释放内存 ~Stack() { delete[] data; } // 入栈操作 void Push(T val) { if (top == size - 1) { std::cout << "Stack is full!" << std::endl; return; } data[++top] = val; } // 出栈操作 T Pop() { if (top == -1) { std::cout << "Stack is empty!" << std::endl; return T(); } return data[top--]; } // 获取栈顶元素 T Top() { if (top == -1) { std::cout << "Stack is empty!" << std::endl; return T(); } return data[top]; } }; int main() { Stack<int> intStack(3); intStack.Push(1); intStack.Push(2); intStack.Push(3); std::cout << "Top element: " << intStack.Top() << std::endl; std::cout << "Popped element: " << intStack.Pop() << std::endl; std::cout << "Popped element: " << intStack.Pop() << std::endl; std::cout << "Top element: " << intStack.Top() << std::endl; Stack<double> doubleStack(3); doubleStack.Push(1.23); doubleStack.Push(4.56); std::cout << "Top element: " << doubleStack.Top() << std::endl; std::cout << "Popped element: " << doubleStack.Pop() << std::endl; std::cout << "Top element: " << doubleStack.Top() << std::endl; return 0; }
を定義します。 T* data
配列はデータを保存するためにテンプレート クラスで使用され、型 T
は任意の型にすることができます。 main
関数では、int
と double
をそれぞれ使用してスタックを操作し、対応する結果を出力しました。 3. 汎用プログラミングの応用: 一般的に使用されるアルゴリズムとデータ構造
#include <iostream> #include <vector> // 快速排序的模板函数 template <typename T> void QuickSort(std::vector<T>& arr, int left, int right) { if (left < right) { int i = left, j = right; T pivot = arr[left]; while (i < j) { while (i < j && arr[j] > pivot) { j--; } if (i < j) { arr[i++] = arr[j]; } while (i < j && arr[i] <= pivot) { i++; } if (i < j) { arr[j--] = arr[i]; } } arr[i] = pivot; QuickSort(arr, left, i - 1); QuickSort(arr, i + 1, right); } } int main() { std::vector<int> arr {5, 2, 7, 1, 9, 3}; QuickSort(arr, 0, arr.size() - 1); for (const auto& num : arr) { std::cout << num << " "; } std::cout << std::endl; return 0; }
を使用してクイック ソート アルゴリズムを実装します。汎用プログラミングを使用すると、任意の型の配列を並べ替えることができます。 main
関数では、std::vector<int></int>
型の配列を定義し、それをすばやく並べ替えて、最後に並べ替えられた結果を出力します。 結論:
以上がC++ でテンプレートと汎用プログラミング機能を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。