我正在研究C++ Reference,发现使用vector :: size()可以在恒定时间内返回向量的大小。但是,我不知道如何在不实际遍历向量的情况下获得大小。
答案 0 :(得分:9)
它只是跟踪元素的数量。
如果更改,则该数字将更新。例如,当调用push_back
或emplace_back
时,元素数增加1。这是std::vector
本质上不是线程安全的众多原因之一。
您可以想象,这使得std::vector
的实现非常灵活-其他C ++标准库容器也可以这样说-这是不尝试自己编写容器类的一个很好的理由。
答案 1 :(得分:8)
要了解这一点,您需要了解vector的工作原理。
一个好的心理模型是:
class vector
{
T *data;. // Pointer to the first element
size_t size; // Number of elements in use
size_t capacity; // Number of elements available
};
无论何时添加元素:
当容量不足时,我们应该扩展数据。简而言之,如果您查看push_back的代码,它将看起来像:
T& push_back(T const& t)
{
if (size == capacity)
grow();
constructAtEnd(t);
++ size;
return back();
}
在实践中,由于例外保证,它有点复杂。但是,鉴于上述情况,对于所有方法,您应该能够检查vector的实现并了解发生了什么情况。
答案 2 :(得分:0)
std::vector
是STL中的序列容器,它具有一个变量,每次都会计数元素的数量。当我们push_back()
到变量{{1}的任何元素递增时,以及我们std::vector
的变量pop_back()
的变量递减时。
所以我认为它像这样
因此std :: vector :: size()返回该变量的大小