哪个模板库应该是新手初学者?
不确定操作系统是否重要,如果重要的话,我正在谈论Windows。
答案 0 :(得分:5)
模板都是关于通用编程的。这个概念就像:你定义一个函数体/类,它可以处理任何类型的数据(具有一些属性,比如定义的特定运算符)。考虑您正在编写一个函数,它将返回给定参数的总和:
int sum(int a, int b)
{
return a + b;
}
现在您希望该函数也适用于字符串。但你不能做到以下几点:
std::string s1 = "abc", s2 = "def";
std::string s = sum(s1, s2);
对于此sum()
来电,您需要定义另一版本的sum()
。模板将保存您的工作。只需按以下方式编写sum()
的定义:
template<typename T>
T sum(const T& a, const T& b)
{
return a + b;
}
现在,函数sum()
适用于定义了operator+
的任何数据类型。
修改强>
如果您想成为C ++程序员,首先需要学习STL (Standard Template Library)。
答案 1 :(得分:3)
对于初学者来说,最好从良好的book开始。标准库(通常也称为STL)是您应该从中开始的模板库。
答案 2 :(得分:2)
模板是核心C ++语言的一个特性,由所有C ++编译器实现。您可以在不使用任何库的情况下编写模板。这只意味着你必须提供所有的模板代码;编译器会根据需要将该代码转换为适当的程序集。
核心理念behing模板是通用代码的概念。对于链接的整数列表,您需要的代码看起来与链接的字符串列表的代码相同;对于一个整数数组,几乎与一个字符串数组相同。模板允许您编写T
个对象的链接列表,而无需预先指定T
。然后,当您需要一个整数的链接列表时,您只需告诉编译器实例化该链接列表T==int
。
现在,链表很常见。因此,您不必编写链表模板;标准库(包含在每个编译器中)包含std::list<T>
模板。要使用它,只需告诉编译器您需要哪种列表。 std::list<float>
,std::list<std::string>
,等等。除了这样的容器类,还有算法。这些也是模板 - std::sort< >
可以对许多不同的容器进行排序。与C中的qsort
不同,C ++编译器知道它的排序方式,这使得std::sort< >
更快。
ATL是一个微软库。它使用模板的原因与标准库相同 - 本身并不是目标,而是因为它允许Microsoft编写代码,然后您可以根据自己的特定需求进行定制。例如,有数千个COM接口。 ATL不需要为每个COM接口提供不同的代码;相反,它提供了一些模板,这些模板是为您想要使用的每个COM交互提供的。
答案 3 :(得分:0)
原则?我不得不说,它主要归结为不是“重新发明轮子”和快速应用程序开发(RAD),通过创建通用代码,只需通过更新模板参数就可以在不同情况下重用。一个很好的例子是std::list
或std::vector
至于使用什么,这取决于你的目标(即:你正在制作什么类型或者pragram,它需要做什么?),通常你可以使用boost和/或目前大多数编译器都附带的STL库