C STL之vector的自定義實現

2021-09-30 16:42:27 字數 2121 閱讀 5030

2018.10.15-至今一直在尋找c++開發崗位的工作,但是剛畢業,沒有工作經驗與專案經歷,工作一直不太好找。聊天中有個朋友說你把stl自己實現一下,放在部落格上,簡單的當作自己的專案。於是就寫了這篇部落格。

注意點:

1、如果是像本文一樣採取類模板template(泛型)來實現,則類的實現與類的宣告要放在同乙個檔案中,否則即使你 #include"***.h" 了,在編譯時也會提示「無法解析的外部符號」。

2、vector容器自身涉及到insert與erase,因此賦值操作必不可少,本篇部落格是實現時暫未考慮到複雜資料型別,即僅僅支援簡單的char、double等基本資料型別。有機會會單獨發一篇部落格來實現支援複雜資料型別(如class、struct)的**。

3、目前為止,自定義容器的常用功能如resize()、reserve()、erase()和insert()的過載均為實現,後續研究出來會更新的。

4、暫時不給出測試**,實際上測試法與vector容器 用法相同,但是應該不支援迭代器(iterator),請謹慎使用begin()、end()等函式的返回值。

5、本文開發環境 vs2013。

類myvector的宣告

templateclass myvector;
類模板myvector的外部實現

構造與析構

templatemyvector::myvector()

templatemyvector::~myvector()

size()、capacity()、empty()、clear()的實現

templateint myvector::size()

templateint myvector::capacity()

templatebool myvector::empty()

templatevoid myvector::clear()

at()、push_back()、pop_back()的實現

templatet myvector::at(int index)

templatevoid myvector::push_back(t v)

templatevoid myvector::pop_back()

容器自增長two()、swap()的實現

templatevoid myvector::two()

}templatevoid myvector::swap(myvector& v)

clear();

for (int i = 0; i < v.size(); ++i)

v.clear();

for (int i = 0; i < len; ++i)

v.push_back(tmp[i]);

}

front()、begin()、end()的實現

templatet myvector::front()

else

return (t)null;

}templatet* myvector::begin()

templatet* myvector::end()

}

insert()、erase()的實現

templatet* myvector::erase(t* pos)

--size;

return p;

}templatet* myvector::insert(t* pos, t val)

data[i] = val;

++size;

return pos;

}//該函式目前存在bug,當capacity初始化過小時,會發生「中斷」

templatevoid myvector::insert(t* pos, int count, t val)

t* p = (t*)null;

int i = 0,j=0;

for (i = size() - 1; data[i]!=*(pos-1); --i)

for (p = pos; p < pos +count; ++p)

*p = val;

}

C STL中的自定義排序和vector

佇列頭部值最大,大頂堆 priority queue,greater pq 小大頂堆 priority queue,less pq 自定義 運算子,傳入兩個引數,內部寫 實際上是從小到大排序與sort相反!寫法一 struct node struct cmp priority queue,cmp p...

vector自定義排序

自定義乙個結構體,用vector存放這個結構體型資料,在push back的時候實現對vector內元素按結構體某一成員進行排序,詳見參考博文。核心 如下,詳細且可執行 可看參考博文。struct pstr from larger to smaller bool comp const pstr ps...

自定義view之自定義屬性

1.首先在res的values檔案下新建乙個名為attrs.xml檔案 在該xml檔案中編寫我們需要的屬性 declare styleable後面的name必須要與接下來要自定義的view名一致。attr 後面的name表示需要自定義的屬性,format表示這些屬性的型別 2.新建乙個類繼承text...