C++ 中向量的 .size() 实际上有什么作用?
What does .size() for a vector in C++ actually do?
换句话说,.size() 是否在调用矢量对象的每个元素时对其进行计数并返回此值,或者 vector 对象是否具有一个 (size_t?) 成员来保存当前在向量中的元素数,并且该成员的值由 .size() 返回?
调用std::vector::size
究竟是什么取决于标准库的特定实现。但是,该标准对其可以做什么和不能做什么施加了一些限制。特别是,它需要调用size
在恒定时间内执行,这意味着它无法计算元素(这在容器大小中是线性的,而不是恒定的)。
向量的实现需要一个指针指向向量的开头,然后是另外两条信息:向量的数据当前有多大(向量中有多少个元素),以及当前向量的容量有多大(分配的数据缓冲区有多大)。后两者可以作为指针实现,也可以实现为beginning
指针的偏移量。任何一种表示都可用于获取常量时间内的数据大小:直接返回偏移量,或将其计算为end - beginning
。
您可以在标准本身或适当的参考文档中验证复杂性要求。
std::vector::size
的实现取决于实现,即使它需要在O(1)
中具有复杂性。
相关文章:
- "delete"在 C++ 中实际上做了什么?
- 您好,我实际上想了解以下代码.有人可以详细说明代码它到底在做什么吗?为什么它会在第 31 行崩溃
- *(int*)&data[18]在这段代码中实际上做了什么?
- mOffsetMatrix在Assimp中实际上做了什么?
- 当我们在 C++ 中说"initialize the object"时,它实际上意味着什么?
- C++ 中向量的 .size() 实际上有什么作用?
- 'return *this'实际上做了什么?
- CPACK_DEB_PACKAGE_COMPONENT实际上做了什么
- 声明是否无效()合法,它实际上是什么?
- 在 IUnknown 中添加和发布,它们实际上做了什么?
- 实际上,什么是负数的模
- vk::D eviceQueueCreateFlags() 实际上做了什么?
- 什么时候 constexpr 实际上不是 constexpr
- C++:去引用实际上在做什么
- boost::asio::io_service::run() 实际上做了什么
- C 如果实际上是继承了类,则内部发生了什么
- 无法理解C++中的枚举,它们实际上是什么?
- 当调用带有警告"control reaches end of non-void function"的函数时,(实际上)会发生什么?
- 实际上什么返回类型有一个新的
- glutswapbuffers实际上做了什么