gpt4 book ai didi

c++ - c++中 "generic programming"是什么意思?

转载 作者:IT老高 更新时间:2023-10-28 13:58:29 25 4
gpt4 key购买 nike

c++中泛型编程是什么意思?

另外,我想弄清楚容器、迭代器以及它们的不同类型是什么意思。

最佳答案

泛型编程意味着您不是在编写按原样编译的源代码,而是您编写源代码的"template",编译器在编译过程中将其转换为源代码。最简单的泛型编程示例是容器类,例如包含其他对象集合的数组、列表或映射。但是泛型编程还有很多。在 C++(也称为元编程)的上下文中,它意味着编写在编译时进行评估的程序。

通用编程的一个基本示例是容器模板:在像 C++ 这样的静态类型语言中,您必须声明单独的容器来保存整数、 float 和其他类型,或者处理指向 void 的指针。因此丢失所有类型信息。作为通用编程的 C++ 方式的模板通过让您定义在定义类时未指定一个或多个参数的类来利用此约束。当您稍后实例化模板时,您会告诉编译器它应该使用哪种类型从模板中创建类。示例:

template<typename T>
class MyContainer
{
// Container that deals with an arbitrary type T
};

void main()
{
// Make MyContainer take just ints.
MyContainer<int> intContainer;
}

模板是通用,因为编译器会将模板翻译成实际代码。请注意,如果您不实例化您的模板,则不会为它生成任何代码。另一方面,如果您声明 MyContainer<int> , 一个 MyContainer<float> , 和 MyContainer<String>编译器将为您的代码创建 三个 版本,每个版本都有不同的类型。将涉及一些优化,但基本上您的模板代码将被实例化为三种新类型。

迭代器是一种设计模式,在 Gamma 等人的开创性著作“设计模式”中得到普及。这是一种迭代容器类内容的模式。不像使用 for -loop 迭代器是一个类的实例,它指向容器的一个成员,并为您提供一个统一的接口(interface)来遍历容器以及访问成员。看看这个例子:

// Instanciate template QList with type int
QList<int> myList;

// put some ints into myList

// Copyconstruct iterator that points to the
// first member of the list.
QList<int>::iterator i = myList.begin();

// Iterate through the list
while (i != myList.end()) {
std::cout << *i << std::endl;
i++;
}

在这个 C++ 示例中,我正在实例化一个类型为 int模板 QList . QList 一个存储对象列表的容器 类。在本例中,我们将使用它来存储整数。

然后我创建一个迭代器 i遍历列表。 myList.begin()返回一个指向列表第一个元素的迭代器。我们可以将迭代器与另一个迭代器进行比较 myList.end()指向列表的最后一个元素之后。如果两个迭代器相同,我们就知道我们已经通过了最后一个元素。在循环中,我们通过使用 *i 访问它来打印元素。并使用 i++ 转到下一个元素.

请注意,在此示例中 *++是重载的运算符并由迭代器类重新实现。在没有运算符重载的编程语言中,可能有像 i.element() 这样的方法。或 i.next()做同样的任务。重要的是看到 i不是一个指针,而是一个模仿指针行为的整个类。

迭代器有什么好处?它们提供了一种统一的方式来访问容器类的成员,完全独立于容器类的内部实现方式。无论您要遍历列表、 map 还是树,迭代器类(应该)始终以相同的方式工作。

关于c++ - c++中 "generic programming"是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3862378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com