存儲概念(Storage concept)

存儲概念(Storage concept)

說明

存儲(Storage)是一個可變大小( variable-size )的容器,元素是以嚴格的線性順序組織。

存儲(Storage)使用一些STL的類似於序列的功能來擴展STL容器概念。對於序列概念的主要的區別在於存儲概念(Storage concept)沒有要求元素的缺省初始化(default-initialisation)。

優化(Refinement of)

隨機訪問容器(Random Access Container)缺省構造(Default Constructible)

相關類型

除了由隨機訪問容器(Random Access Container) 所定義的類型沒有其它的類型。

記法(Notation)

X一個存儲(storage)模型的類型
TX的value_type
t一個T類型的對象
n可以轉化為X::size_type類型的對象

定義

合法表達式(Valid expressions)

除了在隨機訪問容器(Random Access Container), 和 缺省構造(Default Constructible) 所定義的表達式,下面的表達式應當是合法的:
名稱表達式類型要求(Type requirements)返回值類型
帶有大小的構造函數(Size constructor) X(n) T 是 可缺省構造的(DefaultConstructible) X
填充構造(Fill constructor) X(n,t) X
範圍構造(Range constructor) X(i, j) ij輸入迭代器(Input Iterators),值類型可以轉化為T類型 X
改變大小 a.resize(n, t) a 是可變化的(mutable) void
Resize a.resize(n) a 是可變化的(mutable) void

表達式語義

名稱表達式先決條件(Precondition)語義所置條件(Postcondition)
缺省構造函數 X() 生成 0 個元素。 size()==0
帶有大小參數的構造函數(Size-constructor) X(n) n>=0 生成 n 個元素。元素沒有使用一個初始化器(initializer)來構造。那就是說,如果T 是一個(可能有const/volatile修飾) non-POD 類型(或者數組),對象是缺省構造的。否則, 被生成的對象具有不定的值(indeterminate)。 參考ISO C++標準中的 5.3.4 節第 15 段的句子"如果忽略 new 的初始化器(initializer)" 。 size()==n
填充構造(Fill-constructor) X(n,t) n>=0 生成 n 個使用t初始化的元素。 size()==n
範圍構造函數(Range constructor) X(i, j) [i,j) 是一個合法範圍。 將範圍 [i,j) 拷貝到存儲空間(storage)中 size() 等於從ij的距離。每個元素是範圍[i,j)中對應元素的拷貝。
改變大小 a.resize(n, t) n <= a.max_size() 修改容器使得它剛好有 n 個元素。
如果大小改變,這個容器可能會被重新分配。 已經存在的元素被保留,額外的元素是 t 的拷貝。
a.size() == n
改變大小 a.resize(n) n <= a.max_size() 修改容器使得它剛好有 n 個元素。
如果大小改變,這個容器可能會被重新分配。元素值是未初始化的。也就是說, 每個元素的值可能是先前的值或是針對於T類型的缺省構造的值。
a.size() == n

複雜度保證(Complexity guarantees)

不變量(Invariants)

模型(Models)

注意


Copyright (©) 2000-2002 Joerg Walter, Mathias Koch
Use, modification and distribution are subject to the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt ).