对size()方法的EASTL矢量设计

时间:2012-04-14 19:07:31

标签: c++ vector eastl

我对EASTL中矢量的实现有疑问。 链接为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_typeuint32_tmpBegin / mpEnd为T *指针。

我不明白来自(mpEnd - mpBegin)的uint32_t的转换是否等于向量中元素的数字。它不应该被sizeof(T)除以?否则我们只得到向量中所有元素的字节大小?

我错过了什么?

编辑:除非,EASTL矢量不遵循矢量的定义,但是我找不到任何数据,并且它可能用东向量替换stl向量

2 个答案:

答案 0 :(得分:2)

这不是导致操作等于数组中元素数量的强制转换。指针减法在这里做了正确的事情。当您从另一个指针中减去一个指针时,会考虑它们指向的类型的大小。没有必要除以sizeof(T)。它一直是这种方式,即使在C语言中。演员只是将它转换为正确的整数类型作为返回值,如果它还没有。

答案 1 :(得分:1)

如果您使用char*void*,则大小仅以字节为单位。否则,它在sizeof(T)。由于mpEndmpBeginT*