我正在使用的vector的构造函数的规范是:
vector(size_type count, const T& value, const Allocator& alloc = Allocator());
我正在尝试初始化一个向量,我对size_type不太熟悉。 cplusplus和cppreference都没有size_type
的条目。一个快速的谷歌告诉我,它是某种数据类型,用于表示容器之类的尺寸,容量等(我认为)。我仍然不太确定我是否正确理解它或如何使用它。
我们想说我希望初始化int
计数(10*n/3) + 1
向量,其中n
的类型为int
。我可以将计数转换为long
类型吗?我甚至做得对吗?我如何理解和使用size_type
?
请忽略硬件方面的考虑,例如计算机是否可以首先分配足够的内存。我稍后会担心,现在我只想集中精力理解这个概念。
答案 0 :(得分:2)
AB_EXTERN const ABPropertyID kABPersonNoteProperty AB_DEPRECATED("use CNContact.note");// Note - kABStringPropertyType
AB_EXTERN const ABPropertyID kABPersonCreationDateProperty AB_DEPRECATED("");// Creation Date (when first saved)
AB_EXTERN const ABPropertyID kABPersonModificationDateProperty AB_DEPRECATED("");// Last saved date
内定义的man bash
;它实际上是typedef
的同义词,后者又是实现定义的无符号整数类型的typedef,它能够保存当前机器上可能创建的最大对象的大小。在实践中,您可以将其视为某种无符号整数,在引用索引或元素计数时始终在整个std::vector
接口中使用。
On" regular"机器(你有32位整数),如果你没有达到"常规"您的代码中std::size_t
用于元素计数,您可以使用std::vector
来获取没有问题的索引(并且您实际上更安全地避免因无符号整数的算术/比较而产生的细微错误。)
答案 1 :(得分:0)
std::vector<T>::size_type
是无符号整数类型,可以表示分配模型中最大对象的大小。这通常是std::size_t
。
除非你认为自己会遇到最大积分值,否则你不必担心这个问题。只需传入一个整数类型,编译器会告诉你是否做了一些令人发指的事情。
答案 2 :(得分:0)
T::size_type
是一种数据类型,足以容纳机器可以处理的任何结构的大小。所以在32位机器上,这通常是32位无符号整数。
std::size_t
由很多容器定义,通常只重新定义T::size_type x = T::your_operation();
(但严格来说不需要)。定义它的原因是,你可以写MediaRecorder
而不必考虑你正在使用哪个容器。您可以稍后切换容器,T :: size_type仍然是有效的C ++,不需要重做。