Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 什么是向量它甚至有效吗?_C++_Stdvector - Fatal编程技术网

C++ 什么是向量它甚至有效吗?

C++ 什么是向量它甚至有效吗?,c++,stdvector,C++,Stdvector,我一直在使用vector但是我不知道像vector这样的东西也存在,我可以声明它, 但是我不知道如何使用它 vector是一个有效的容器吗?如果是,两者之间有什么区别 向量 如果没有,为什么我可以申报 什么是向量 std::vector的第二个tempalate参数是分配器,因此这是一个vector,其分配器类型为int 它甚至有效吗 否。int不满足分配器的要求 如果没有,为什么我可以申报 好的,用至少两个模板参数实例化一个模板,并且用两个类型参数实例化最多两个没有默认值的模板参数是格式良好的

我一直在使用vector>但是我不知道像vector这样的东西也存在,我可以声明它, 但是我不知道如何使用它

vector是一个有效的容器吗?如果是,两者之间有什么区别 向量>

如果没有,为什么我可以申报

什么是向量

std::vector的第二个tempalate参数是分配器,因此这是一个vector,其分配器类型为int

它甚至有效吗

否。int不满足分配器的要求

如果没有,为什么我可以申报

好的,用至少两个模板参数实例化一个模板,并且用两个类型参数实例化最多两个没有默认值的模板参数是格式良好的。直到您尝试使用分配器,您才可能遇到格式良好的问题

用这种语言无法表示模板参数必须满足某些属性,标准库也没有这样的强制。在未来的C++标准中提出的概念特征可以用于执行一些这样的要求,并且将来也可能要求容器使用概念。 如果模板实例化不符合标准容器所需的规范,则标准不要求编译器诊断错误。引用最新标准草案:

[关于职能的决议]

在某些情况下,替换函数、处理函数、用于实例化标准库模板组件的类型的操作,C++标准库依赖于C++程序提供的组件。 如果这些组件不满足其要求,则本文件不对实施提出任何要求

特别是,在以下情况下,影响未定义:

对于实例化模板组件时用作模板参数的类型,如果该类型上的操作未实现适用需求子类[allocator.Requirements]、[container.Requirements]、[iterator.Requirements]、[algorithms.Requirements]、[numeric.Requirements]的语义。 除非另有规定,否则对此类类型的操作可以通过引发异常来报告失败。
该宣言在理论上可以汇编,因为没有任何限制。在我的系统上,它不会编译。

这里的关键是std::vector中的模板参数列表

根据文档@,std::vector使用两个模板参数,一个是要存储的对象的T类型,另一个是与分配器概念匹配的分配器类型

分配器用于执行分配。如果您将int作为分配器传递,它将无法编译,而且对我来说确实如此,因为int不包含分配器中所期望的任何功能


第一个示例,vector是一个向量,其中包含的对象是一对int,使用的分配器是默认分配器。

声明中需要注意的重要一点是,这意味着vector中的每个项都是一对。所以当你从向量中抽取时,你会得到一个包含两个整数的对。我认为vector是无效的,或者至少不是很好的实践。编译是有意义的
template <class T, class Allocator = allocator<T> >
class vector