最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(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的評論 (共 條)

分享到微博請遵守國家法律
太和县| 徐州市| 海南省| 内乡县| 日土县| 监利县| 三穗县| 顺义区| 兴海县| 固始县| 清远市| 虞城县| 靖西县| 广元市| 贵定县| 湖口县| 务川| 宝应县| 交口县| 信宜市| 肥东县| 威宁| 尚志市| 邵阳县| 威海市| 灵宝市| 盐城市| 公安县| 台东县| 延寿县| 涪陵区| 山东省| 志丹县| 金山区| 贵港市| 鹤岗市| 南川市| 溧水县| 内黄县| 武乡县| 佳木斯市|