C++用类模板封装容器

本文介绍了如何使用C++的类模板和函数模板处理不同数据类型的容器值,通过构造函数初始化和类成员函数操作,实现对各种容器内容的统一访问和操作。
摘要由CSDN通过智能技术生成

要实现输出不同容器的值,且各容器包含的数据类型也不同,可以使用类模板和函数模板来实现。

示例代码如下:

#include <iostream>
#include <vector>
#include <list>

template <typename T>
class Container {
private:
    T container;

public:
    Container(T c) : container(c) {}

    void print() {
        for (auto it = container.begin(); it != container.end(); ++it) {
            std::cout << *it << " ";
        }
        std::cout << std::endl;
    }
};

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    std::list<std::string> lst = {"apple", "banana", "cherry"};

    Container<std::vector<int>> intContainer(vec);
    Container<std::list<std::string>> stringContainer(lst);

    std::cout << "Vector 内容如下: ";
    intContainer.print();

    std::cout << "List 内容如下: ";
    stringContainer.print();

    return 0;
}

问题1:container是不是一个容器 

在这个代码示例中,container并不是一个容器,它只是一个类模板Container中的一个成员变量。在这里,container的类型是模板参数T所指定的类型,可以是任何类型,包括但不限于容器类型。

在构造函数Container(T c)中,我们将传入的参数c赋值给container,这意味着container将包含传入的参数c的值。在示例中,我们传入了一个vector或list作为参数c,因此container将包含这些容器的值。实际上,container可以是任何类型的数据,不仅仅限于容器类型。

问题2: Container(T c) : container(c) {}解读

这行代码是Container类的构造函数的定义,其中使用了成员初始化列表来初始化Container类的成员变量container。在这里,参数c被传递给container,用于初始化container成员变量。

这行代码的含义是:

  • Container(T c):这是Container类的构造函数,接受一个参数c,该参数的类型由模板参数T指定。
  • : container(c):这是成员初始化列表的语法,用于初始化Container类的成员变量container。在这里,我们将传入的参数c赋值给container成员变量。

这种成员初始化列表的方式可以在对象构造时更高效地初始化成员变量,尤其是对于类类型的成员变量或常量成员变量。

问题3:为什么这么初始化后,container就可以当容器使用了 

在示例代码中,我们定义了一个类模板Container,其中包含一个成员变量container。通过构造函数中的初始化操作 Container(T c) : container(c) {},我们将传入的参数c赋值给container成员变量。

由于container的类型是模板参数T所指定的类型,我们可以在实例化Container类时将任何类型的数据传递给container。在示例中,我们传入了一个vector或list作为参数c,因此container实际上包含了传入的vector或list。

虽然container本身并不是一个容器,但我们可以通过Container类的成员函数(如print()函数)来访问和操作container成员变量,从而实现对传入的容器进行操作。因此,通过这种方式初始化container,我们可以在Container类中使用传入的容器数据,实现对不同类型的容器进行操作。

实战:我博客中C++ primer plus第十六章第16.8题充分运用了这里的知识点,建议大家可以尝试一下。

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值