[英]How does the vector::size() returns size of the vector in constant time?
它只跟蹤元素的數量。
如果更改,則更新該數字。 例如,當調用push_back
或emplace_back
時,元素的數量增加1。 這是std::vector
本質上不是線程安全的眾多原因之一。
可以想象,這使得std::vector
的實現非常繁瑣 - 對於其他C ++標准庫容器也是如此 - 這是不嘗試自己編寫容器類的一個很好的理由。
要理解這一點,您需要了解矢量的工作原理。
一個好的心理模型是:
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();
}
實際上,由於異常保證,它有點復雜。 但是,鑒於上述情況,您應該能夠檢查矢量的實現並識別所有方法的情況。
std::vector
是STL中的一個序列容器,它有一個變量,每次都計算元素的數量。 當我們將push_back()
任何元素添加到std::vector
,變量會增加,當我們從std::vector
pop_back()
元素時,變量會遞減。
所以我覺得它是這樣的
所以std :: vector :: size()返回該變量的大小
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.