C++编程中的向量类

3

有人能解释一下vector类的用途吗?我的教授在讲座中提到了下面的句子。 模板:每个向量都有一个类参数,它确定该实例将使用哪种对象类型,通常称为T。我不明白类参数究竟是什么意思?


10
你问过你的老师了吗? - Edward Strange
3
顺便问一下,昨天的筷子分类作业你做得怎么样了? - Steve Townsend
进展得很顺利,我想今天就能完成它。谢谢你关心它。 - Cool
4个回答

13

C++中的vector类型本质上是一个动态数组。类参数是vector内元素的类型。例如:

int arr[];  // Static C++ array with int elements
vector<int> v; // dynamic array with int elements
在这个例子中,int是类的参数类型。 编辑 正如一些评论所指出的那样,你老师选择使用“类参数”这个术语是误导性的。更正确的说法是“模板参数”。

为了明确起见:“类参数”本质上是“类”的类型(尽管它可以是原语,因此可能是“类型”)。 - Kendrick
我同意- 把它称为类是误导的,因为你可以传递原始类型。这不是Java。 - Puppy
无论如何,它确实是一个模板参数,如果我没记错的话,它的类型是 typename - strager
老师选择的术语确实有点奇怪,但也许是由于类关键字,如template<class T>。 - Rune FS
@Rune FS:虽然可以使用class,但建议使用typenameclass最初被使用是因为不愿引入新的关键字,但它既令人困惑(因为您可以传递内置类型或struct),也使关键字的含义上下文相关。 - Matthieu M.
@Matthieu 我完全同意。就我个人而言,我不使用<class>。我曾与许多开发人员合作,他们认为它意味着只能传递一个类。我也不称之为类参数(除了在这里与OP的术语一致),但我试图指出编写template<class T>的人可能会将T称为类参数。如果这似乎是对该用法的推荐,我很抱歉。 - Rune FS

2

向量被定义为类似模板的形式:

template<typename T>
class Vector;

要使用它,您需要像这样实例化模板:

Vector<char> myVector;

实例化一个向量实际上创建了一个新的类,这个类等同于如果你用类参数(在此情况下为char)替换模板定义中的每个T所得到的结果。

因此,如果我们有一个简单的模板

template<typename T>
class DataHolder{ 
public:
 T data
}

实例化方式如下:

DataHolder<char> myChar;

等同于以下类:

class DataHolder
{
public:
 char data;
}

谢谢,对问题感觉更好了。 - Cool

1
一个例子:
std::vector<int> v;

这声明了一个vector(动态数组),其中包含int元素。最初它包含零个元素的空间。

网络上有许多关于基本C++的资源。例如,有关STL vector的更多信息,请参见this page


我的教授给了我cplusplus.com网站作为参考,但我认为你给的网站更容易理解。谢谢。 - Cool


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接