簡體   English   中英

STL容器類:數組

[英]STL container class: array

我只是在探索C ++中的STL容器。 有一些問題...有兩個成員函數max_size()和size()。 他們似乎在做同樣的事情。 我最初以為max_size()是數組的實際大小,而size()是顯式存儲的元素數。 但是,正如我測試過的那樣,情況並非如此。 那為什么要兩個不同的功能呢?

有什么地方可以像Java一樣閱讀容器的設計規范(不是功能說明)? 我似乎有很多問題,例如為什么std :: array的大小是固定的,但是卻不能像std :: vector這樣動態地更改等。顯然,這種設計決定有一個或另一個原因。 閱讀此類設計規范以了解此類限制將非常有用。 我有一個舊的“有效STL”,其中不包含std :: array。 我相信Scott meyers尚未在其中包含std :: array。

按照標准中的規定, max_size()是容器可能存儲的最大元素數:

用於最大可能容器的distance(begin(), end())

(C ++ 11,[container.requirements.general],表96)

對於array是固定大小的容器,它與size()一致,而對於動態容器則完全不同,例如std::vector (它將返回類似於虛擬地址空間大小除以大小的內容)的元素)。

您可以在C ++標准中找到容器的所有規范(價格昂貴,但其草案可在網上免費獲得),盡管它只是一個規范性規范,往往無法很好地解釋某些決策背后的原理(並且故意含糊不清)關於容器的實施)。

盡管如此,之間的差std::arraystd::vector ,這是因為std::array旨在向存儲元件不訴諸堆,提供相同性能的替代本地C數組,而std::vector使用堆存儲元素,這可以提供更大的靈活性,但要付出一定的代價。 請參閱我的答案,以更詳細地比較std::arraystd::vector

僅存在std::arraymax_size方法,以使其看起來與其他STL容器類似。 通過與其他容器具有公共接口,許多相同的代碼可用於array s, vector s和list s。

當然,由於array<T, N>size是該類型的一部分,因此sizemax_size必須都返回相同的值N

回復:我最初以為max_size()是數組的實際大小,而size()是顯式存儲的元素數。

我認為您將vector :: capacity()與max_size()混淆了。 在我的計算機(32位)中,對於int類型,max_size = 1073741823,對於雙精度類型,max_size = 536870911。這意味着4G = 2 ^ 32 = 1073741823 * sizeof(int)= 536870911 * sizeof(double)。因此,max_size =您可以在電腦中使用的最大尺寸(無用!僅用於兼容):)

回復:有什么地方可以閱讀Java之類的容器設計規范(不是功能描述)? 也許> Annotated STL Sources <對您而言不是最好的選擇,但對於STL來說卻是一本好書。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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