为什么向量的数据类型在C+中的尖括号内声明+;? 我对C++中的数据类型声明感到困惑。通常,它的编写方式类似于-inta表示变量a是整数数据类型。但是对于向量类型的数组,它写为-vector-vectorname为什么需要这样做?是因为向量就像C++中的一个类吗?我查看了以下讨论相关主题的链接:

为什么向量的数据类型在C+中的尖括号内声明+;? 我对C++中的数据类型声明感到困惑。通常,它的编写方式类似于-inta表示变量a是整数数据类型。但是对于向量类型的数组,它写为-vector-vectorname为什么需要这样做?是因为向量就像C++中的一个类吗?我查看了以下讨论相关主题的链接:,c++,vector,C++,Vector,这些链接讨论了尖括号在模板声明中的作用,我理解并知道这一点。我无法得到关于为什么这些对向量是必要的问题的答案。每当你在C++中看到类似之类的东西时,那就是模板。模板就像一个“配方”,可以用来在编译时生成另一段代码。或者换句话说,T(通常是一种类型,如int或string)只是一个参数,与C或任何其他语言中的函数具有参数的方式相同。但在C++中,这些参数在编译时被评估,因此一旦程序被构建,它们就不需要执行。 < P>从类模板指定的类型名称 STD::vector < /代码>或其他容器将指定使用什

这些链接讨论了尖括号在模板声明中的作用,我理解并知道这一点。我无法得到关于为什么这些对向量是必要的问题的答案。

每当你在C++中看到类似<代码>之类的东西时,那就是模板。模板就像一个“配方”,可以用来在编译时生成另一段代码。或者换句话说,
T
(通常是一种类型,如
int
string
)只是一个参数,与C或任何其他语言中的函数具有参数的方式相同。但在C++中,这些参数在编译时被评估,因此一旦程序被构建,它们就不需要执行。

< P>从类模板指定的类型名称<代码> STD::vector < /代码>或其他容器将指定使用什么类型的数据,然后在编译时生成代码。您应该指定要在尖括号或模板参数内使用的数据类型

(C++类模板参数推导)在C++ 17中引入,它与函数模板参数推导相同,不再需要指定它的类型,因为编译器将在不初始化初始化的情况下声明实例。 <代码> //在C++ 17之前: std::向量vect1{4,5,10,4,10};//好啊 std::向量vect2{3,1,5,10};//错误:缺少模板参数! //因为C++ 17: std::向量vect3{23,12,5,12};//好啊 std::向量vect4{4,2,1,1,3,10};//好啊 标准::向量vect5;//错误:类模板参数推断失败! 标准::向量vect5;//好啊
vect4
的类型将与其他实例的类型完全相同,即
std::vector
或内部
std::vector

std::vector
是类模板。尖括号中的东西是它的参数。你说你理解并知道这一点,那么还有什么是不清楚的?我想你需要开始阅读。“为什么这是必要的?”也许不是,但还没有人知道。如果没有尖括号,你会怎么写呢?
std::vector
和其他容器一样;它需要一个模板参数来指定其元素的类型。@IgorTandetnik:我知道这是用于在尖括号中定义泛型数据类型的模板。只要向编译器传递了任何值,编译器就会根据传递给模板函数的值自动分配数据类型。这与向量的特性非常不同。我们正在声明一个固定的数据类型-integer/double/float,那么为什么要将其作为模板呢?它可以像数组一样被设计和声明。我相信这是有原因的,这就是我想理解的。约翰,谢谢你的简单回答。那么,我们是否不需要为数组使用类似的声明语法,因为向量是模板,数组不是?如果是,那么要知道所有这些预定义模板是否有我可以参考的列表?@AGOEL“是否有我可以参考的列表?”@AGOEL:在C++中数组实际上有一个类似的语法:
std::array arr。请注意,
10
在编译时用于执行C在您说
intarr[10]时所做的操作@JohnZwinck:谢谢分享。你能解释一下什么时候更喜欢你提到的声明语法(使用尖括号)而不是语法:inta[10];在C++中?如果有什么我应该先读的,请让我知道。@AGOEL:你应该使用
std::array-arr。它比C风格的
intarr[10]更具特色