我一直在工作,vector < pair < int,int>>但我不知道类似的东西vector< int,int>也存在,我可以声明它,但不知道如何使用它。
是vector < int,int>一个有效的容器,如果是,那和之间的区别是什么vector < pair < int,int>>?
如果没有,我为什么可以宣布呢?
什么是
vector<int,int>
的第二个临时参数std::vector是分配器,因此这是一个向量,其分配器的类型为int。
它甚至有效吗?
编号int不满足分配器的要求。
如果没有,我为什么可以宣布呢?
好吧,使用至少两个模板参数实例化一个模板,并且使用两个类型参数来实例化一个模板,该模板参数最多具有两个没有默认值的模板参数。直到您尝试使用分配器时,您可能会遇到格式正确的问题。
没有办法用语言来表示模板参数必须满足某些属性,并且标准库也没有这种强制性。建议在将来的C ++标准中引入的“ 概念”功能可用于强制执行(某些)此类要求,并且将来可能还要求容器使用这些概念。
如果您的模板实例化不符合标准容器的要求规范,则该标准不需要编译器来诊断错误。引用最新的标准草案:
[根据功能]
在某些情况下(替换函数,处理函数,用于实例化标准库模板组件的类型的操作),C ++标准库取决于C ++程序提供的组件。 如果这些组件不满足其要求,则本文档对实现没有任何要求。
特别是在以下情况下,效果是不确定的:
- 对于在实例化模板组件时用作模板参数的类型,如果对类型的操作未实现适用的“要求”子句的语义([allocator.requirements],[container.requirements],[iterator.requirements],[algorithms。要求],[数字要求])。除非另有说明,否则对此类类型的操作可以通过引发异常来报告失败。
该声明理论上可以编译,因为没有限制。在我的系统上,它无法编译。