换句话说,.size()会在调用向量对象的每个元素时对其进行计数并返回此值,或者向量对象是否具有(size_t?)成员,该成员包含当前在向量中的元素数,并且.size()?
返回此成员的值答案 0 :(得分:10)
对std::vector::size
的调用完全取决于标准库的特定实现。但是,该标准将几个约束放在它能做什么和不能做什么上。特别是,它需要调用size
以恒定时间执行,这意味着它不能计算元素(在容器大小中是线性的,而不是常量)。
向量的实现需要一个指针指向向量的开头,然后是其他两条信息:当前向量数据的大小(向量中有多少元素),以及当前向量的容量有多大(分配的数据缓冲区有多大)。后两者既可以作为指针实现,也可以作为beginning
指针的偏移实现。两种表示都可用于在恒定时间内获取数据大小:直接返回偏移量,或将其计算为end - beginning
。
您可以在标准本身或合适的reference documentation中验证复杂性要求。
答案 1 :(得分:4)
std::vector::size
的实施依赖于实施,即使要求O(1)
具有复杂性。