C++ 中向量的 .size() 实际上有什么作用?

What does .size() for a vector in C++ actually do?

本文关键字:实际上 什么 作用 向量 size C++      更新时间:2023-10-16

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

调用std::vector::size究竟是什么取决于标准库的特定实现。但是,该标准对其可以做什么和不能做什么施加了一些限制。特别是,它需要调用size在恒定时间内执行,这意味着它无法计算元素(这在容器大小中是线性的,而不是恒定的)。

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

您可以在标准本身或适当的参考文档中验证复杂性要求。

std::vector::size的实现取决于实现,即使它需要在O(1)中具有复杂性。