C語言中文網 目錄
首頁 > STL > string類 閱讀:761

C++ string支持配置器方法詳解

< 上一頁C++ string支持迭代器 序列容器下一頁 >

配置器STL 的重要內容。使用 STL 必然會涉及容器,而容器中存儲了大量的數值,必然需要分配內存空間。配置器的作用就是為容器分配內存。

配置器最早是為將內存模型抽象化而提出的。所以使用內存配置器分配內存時,是按對象的個數進行的,而不是按字節數。這有別于原來的 new [] 和 new 操作符。配置器最大的優點在于,配置器實現了將算法、容器與物理存儲細節分隔。配置器可以提供一套分配與釋放內存的標準方式,并提供用作指針類型和引用類型的標準名稱。目前而言,配置器僅是一種純粹的抽象。行為上類似分配器的類型都可看作配置器。

C++ STL 提供了標準分配器,目的是為用戶提供更多的服務。basic_string 模板以及 string 類均提供了對常見配置器的相關支持。basic_string 類模板中包含 1 個配置器類型的成員 allocator_type。對于 string 對象,allocator_type 可以作為配置器類的對象使用;對 string 類而言,allocator_type 等價于 allocator<char>,即分配數據類型為 char 的內存,便于 string 類的對象存儲 char 型字符。

同時 basic_string 類模板的第 3 個參數也是配置器模板參數。basic_string 類模板的形式如下:

template <class CharType, class Traits = char_traits <CharType>, class Allocator=allocator<CharType>> class basic_string

而 string 類的聲明形式如下:

typedef basic_string <char> string;

對于 basic_string 類模板,其第 1 個參數是 CharType,第 2 個參數和第 3 個參數的默認值和 CharType 均相關。在聲明 string 類時,參數 char 取代模板中的 CharType,string 即成為模板的實例,同時模板中的第 3 個參數成為 "class Allocator = allocator <char>",其意義為 string 中對象的內存類型為 char 型。

string 類還提供了 1 個和配置器相關的函數 get_allocator(),其函數原型為:

allocator_type string:: get_allocator () const

函數返回 string 類的內存模型對象,可以用于構造新的字符串。以如下程序為例介紹該函數的使用方法。
#include <iostream>
#include <string>
#include <memory>
using namespace std;
int main ()
{
    string s("abed");
    basic_string <char> s1 (s.get_allocator());
    basic_string <char> :: allocator_type aT = s1.get_allocator ();
    string::size_type se = s1.size ();
    cout << se << endl;
}
由于在 string 類中,allocator 是保護成員,難以直接調用對內存的直接配置。對于配置器,一般情況下都是使用默認配置器。對于本節內容,讀者了解即可。
< 上一頁C++ string支持迭代器 序列容器下一頁 >

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo