當前位置:編程學習大全網 - 源碼下載 - C++中vector和string類是怎麽實現輸入的?

C++中vector和string類是怎麽實現輸入的?

其實是用new運算符,new運算符用於分配堆空間。new的基本語法是"new 類型名";和"new 類型名[]"。前者分配單個對象,後者是比較數組的。還有其他的語法,我這裏只說三種。第二種是帶賦值的語法:"new 類型名(該類型的壹個對象),用於賦值給分配到的空間;和"new 類型名[] { 該類型的對象的列序 };,用於分別賦值給分配到的數組空間。還有壹種語法就是“new(指針) 類型名(賦值對象),同上,有對數組的語法,它們是把空間分配到此指針所指的空間上,賦值對象可有可無。

標準庫裏有壹個std::allocator模板,在<memory>裏定義,下面是壹些源碼:

namespace std {

template<class T> class allocator {

// ...

typedef size_t size_type;

T* allocate(size_type sz,int =0); // 比較sz個空間

void constuct(T* p, const T& value) { new (p) T(value); } //分配賦值。

// ...

};

template<class Char_type> char_traits { }; // 為空,壹切的類型都是通過對這個類型的專門化來做的,而char_traits<char>和char_traits<wchar_t>是做了專門化,裏面有壹些char_type的比較函數,比整數到字符類型的轉化等。

// 這樣,string和vector的實現就好像這樣:

template<class Char_type, class Traits=char_traits<Char_type>,class Alloc = allocator<Char_type> > class string {

// ...

Alloc alloc;

Char_type* all_ptr;

void push_back(Char_type val); 用alloc.construct即new (pointer) Char_type(val);來實現

string operator+(const char* p);

};

}

  • 上一篇:java.Iterator叠代器,誰給我發壹份教程
  • 下一篇:大數據如何入門
  • copyright 2024編程學習大全網