簡體   English   中英

vector :: size()如何在常量時間內返回向量的大小?

[英]How does the vector::size() returns size of the vector in constant time?

我正在閱讀這篇C ++參考資料 ,發現使用vector :: size()會在常量時間內返回向量的大小。 但是,我想知道如何在不實際遍歷矢量的情況下獲得大小。

它只跟蹤元素的數量。

如果更改,則更新該數字。 例如,當調用push_backemplace_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM