温馨提示×

Linux C++模板编程应用

小樊
34
2025-03-21 02:04:25
栏目: 编程语言
C++开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在Linux环境下使用C++模板编程可以带来很多好处,包括代码复用、类型安全和性能优化。以下是一些常见的Linux C++模板编程应用:

1. 容器类

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;
}

2. 算法

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;
}

3. 函数模板

函数模板允许你定义一个函数,它可以处理多种数据类型。

#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;
}

4. 类模板

类模板允许你定义一个类,它可以处理多种数据类型。

#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;
}

5. 模板特化

模板特化允许你为特定类型提供特定的实现。

#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;
}

6. 变参模板

变参模板允许你定义接受任意数量和类型参数的模板。

#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++的关系是什么

0