在Linux环境下使用C++模板编程可以带来很多好处,包括代码复用、类型安全和性能优化。以下是一些常见的Linux C++模板编程应用:
C++标准库中的容器(如std::vector
, std::list
, std::map
等)都是基于模板的。你可以利用这些容器来存储和操作不同类型的数据。
#include <iostream>
#include <vector>
template<typename T>
void printVector(const std::vector<T>& vec) {
for (const auto& elem : vec) {
std::cout << elem << " ";
}
std::cout << std::endl;
}
int main() {
std::vector<int> intVec = {1, 2, 3, 4, 5};
printVector(intVec);
std::vector<std::string> strVec = {"Hello", "World"};
printVector(strVec);
return 0;
}
C++标准库中的算法(如std::sort
, std::find
, std::transform
等)也是基于模板的。你可以利用这些算法来操作不同类型的数据。
#include <iostream>
#include <vector>
#include <algorithm>
template<typename T>
void printVector(const std::vector<T>& vec) {
for (const auto& elem : vec) {
std::cout << elem << " ";
}
std::cout << std::endl;
}
int main() {
std::vector<int> intVec = {5, 3, 4, 1, 2};
std::sort(intVec.begin(), intVec.end());
printVector(intVec);
std::vector<std::string> strVec = {"banana", "apple", "cherry"};
std::sort(strVec.begin(), strVec.end());
printVector(strVec);
return 0;
}
函数模板允许你定义一个函数,它可以处理多种数据类型。
#include <iostream>
template<typename T>
T add(T a, T b) {
return a + b;
}
int main() {
std::cout << "Adding integers: " << add(3, 4) << std::endl;
std::cout << "Adding doubles: " << add(3.5, 4.5) << std::endl;
std::cout << "Adding strings: " << add(std::string("Hello, "), std::string("World!")) << std::endl;
return 0;
}
类模板允许你定义一个类,它可以处理多种数据类型。
#include <iostream>
template<typename T>
class Stack {
private:
T* data;
int top;
int capacity;
public:
Stack(int size) : capacity(size), top(-1) {
data = new T[capacity];
}
~Stack() {
delete[] data;
}
void push(T value) {
if (top < capacity - 1) {
data[++top] = value;
} else {
std::cerr << "Stack overflow!" << std::endl;
}
}
T pop() {
if (top >= 0) {
return data[top--];
} else {
std::cerr << "Stack underflow!" << std::endl;
return T();
}
}
bool isEmpty() const {
return top == -1;
}
};
int main() {
Stack<int> intStack(5);
intStack.push(1);
intStack.push(2);
intStack.push(3);
while (!intStack.isEmpty()) {
std::cout << intStack.pop() << " ";
}
std::cout << std::endl;
Stack<std::string> strStack(5);
strStack.push("Hello");
strStack.push("World");
while (!strStack.isEmpty()) {
std::cout << strStack.pop() << " ";
}
std::cout << std::endl;
return 0;
}
模板特化允许你为特定类型提供特定的实现。
#include <iostream>
template<typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
// 特化版本 for char*
template<>
char* max<char*>(char* a, char* b) {
return (strcmp(a, b) > 0) ? a : b;
}
int main() {
std::cout << "Max of integers: " << max(3, 4) << std::endl;
std::cout << "Max of doubles: " << max(3.5, 4.5) << std::endl;
char* str1 = "apple";
char* str2 = "banana";
std::cout << "Max of strings: " << max(str1, str2) << std::endl;
return 0;
}
变参模板允许你定义接受任意数量和类型参数的模板。
#include <iostream>
template<typename... Args>
void print(Args... args) {
(std::cout << ... << args) << std::endl;
}
int main() {
print(1, "Hello", 3.14, 'A');
return 0;
}
这些示例展示了在Linux环境下使用C++模板编程的一些常见应用。模板编程可以显著提高代码的灵活性和复用性,但也需要谨慎使用,以避免编译时间增加和代码复杂性提高。
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
推荐阅读:linux和c++的关系是什么