我对 EASTL
中 vector 的实现有疑问。
链接是here.
即,在方法 size()
上。这是它的样子:
template <typename T, typename Allocator>
inline typename vector<T, Allocator>::size_type
vector<T, Allocator>::size() const
{
return (size_type)(mpEnd - mpBegin);
}
size_type
是uint32_t
,mpBegin
/mpEnd
是T*指针。
我不明白从 (mpEnd - mpBegin) 到 uint32_t 的转换如何等于 vector 中元素的数量。不应该除以sizeof(T)
吗?否则我们只是获取 vector 中所有元素的大小(以字节为单位)?
我错过了什么?
编辑:除非,EASTL vector 不遵循 vector 的 STL 定义,但我找不到关于它的任何数据,并且据说可以用 eaSTL vector 替换 STL vector
最佳答案
导致操作等于数组中元素数的不是强制转换。指针减法在这里已经做了正确的事情。当您从一个指针中减去另一个指针时,会考虑它们指向的类型的大小。不需要除以 sizeof(T)
。一直都是这样,即使在 C 中也是如此。强制转换只是将其转换为返回值的正确整数类型(如果尚未转换)。
关于c++ - EASTL vector-design on size() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10156480/