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

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

分享到微博請遵守國家法律
甘洛县| 望奎县| 惠东县| 抚松县| 伽师县| 衡阳市| 安徽省| 阿克陶县| 民乐县| 明溪县| 南和县| 辽阳县| 和平县| 商城县| 永福县| 资源县| 洛扎县| 肇源县| 贵南县| 乐昌市| 小金县| 皋兰县| 广灵县| 汾阳市| 九江县| 大埔区| 土默特右旗| 海晏县| 大同县| 沭阳县| 武汉市| 福州市| 密云县| 桐梓县| 连云港市| 德江县| 靖远县| 小金县| 融水| 长垣县| 五大连池市|