五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

【從零手撕STL源碼】3、手撕一個簡易vector

2023-04-12 18:30 作者:愛麗-黑子  | 我要投稿

照著寫了下,順便修改了一下代碼(就是修復了最后的bug)以及潛在的雙重釋放問題(?)反正我是有的

代碼附上

~~~c++

#include<iostream>

using namespace std;


/*

vector push_back pop_back operator[] begin end size

*/


template<typename T>

class MyVector

{

public:

typedef T value;

typedef T* iterator;

typedef T& reference;

private:

iterator m_Data;//Data(start_ptr)

iterator start;//start_ptr

int m_len;//length

int pos;//m_len - 1

public:

MyVector(int len = 0);

~MyVector();

void push_back(T v);//MyVector.push_back()

value pop_back();//MyVector.pop_back()

int size();//MyVector.size()

iterator begin();//MyVector.begin()

iterator end();//MyVector.end()

T& operator[](int n);//MyVector[]

};


template<typename T>

MyVector<T>::MyVector(int len)

: m_len(len), m_Data(nullptr), start(nullptr), pos(0)

{

if (len > 0)

{

m_Data = new value[len];

start = m_Data;

}

}


template <typename T>

MyVector<T>::~MyVector()

{

if (m_Data != nullptr)

{

m_Data = nullptr;

delete m_Data;

}

}


template<typename T>

auto MyVector<T>::push_back(T v) -> void

{

if (m_len != pos)

{

*(start + pos) = v;

pos++;

}

else

{

cout << "越界了!" << endl;

}

}


template<typename T>

inline auto MyVector<T>::pop_back() -> value

{

--pos;

return *(start + pos);

}


template<typename T>

auto MyVector<T>::size() -> int

{

return this->m_len;

}


template<typename T>

typename MyVector<T>::iterator MyVector<T>::begin()

{

return this->start;

}


template<typename T>

typename MyVector<T>::iterator MyVector<T>::end()

{

return this->start + pos;

}


template<typename T>

T& MyVector<T>::operator[](int n)

{

if (n < pos)

{

return *(start + n);

}

else

{

cout << "數(shù)組越界啦!" << endl;

throw out_of_range("數(shù)組越界啦!");

}

}


template<typename T>

ostream& operator<<(ostream& cout,MyVector<T> vec)

{

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

{

cout << vec[i] << " ";

}

return cout;

}


int main()

{

MyVector<int> vec(10);

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

{

vec.push_back(i);

}


cout << vec << endl;


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

{

vec[i] = 100;

}


cout << vec << endl;


// for (MyVector<int>::iterator it=vec.begin(); it != vec.end(); it++)

// {

// cout << *it << " ";

// }


return 0;

}

~~~

【從零手撕STL源碼】3、手撕一個簡易vector的評論 (共 條)

分享到微博請遵守國家法律
闵行区| 甘洛县| 丰宁| 汉源县| 崇信县| 旬阳县| 治多县| 吉木乃县| 那曲县| 拉孜县| 高尔夫| 城固县| 吉木萨尔县| 昌宁县| 金川县| 汉川市| 三亚市| 阿拉善右旗| 炉霍县| 兴安县| 太谷县| 涪陵区| 盐源县| 墨脱县| 临汾市| 佳木斯市| 临潭县| 葵青区| 绵竹市| 晴隆县| 稻城县| 武义县| 恩施市| 辽阳市| 富裕县| 襄城县| 井陉县| 岑巩县| 抚顺县| 图木舒克市| 鄢陵县|