C ++中向量的.size()实际上做了什么?

时间:2017-05-20 14:13:27

标签: c++

换句话说,.size()会在调用向量对象的每个元素时对其进行计数并返回此值,或者向量对象是否具有(size_t?)成员,该成员包含当前在向量中的元素数,并且.size()?

返回此成员的值

2 个答案:

答案 0 :(得分:10)

std::vector::size的调用完全取决于标准库的特定实现。但是,该标准将几个约束放在它能做什么和不能做什么上。特别是,它需要调用size以恒定时间执行,这意味着它不能计算元素(在容器大小中是线性的,而不是常量)。

向量的实现需要一个指针指向向量的开头,然后是其他两条信息:当前向量数据的大小(向量中有多少元素),以及当前向量的容量有多大(分配的数据缓冲区有多大)。后两者既可以作为指针实现,也可以作为beginning指针的偏移实现。两种表示都可用于在恒定时间内获取数据大小:直接返回偏移量,或将其计算为end - beginning

您可以在标准本身或合适的reference documentation中验证复杂性要求。

答案 1 :(得分:4)

std::vector::size的实施依赖于实施,即使要求O(1)具有复杂性。