基于模板写一个自己的vector,傻瓜版本
已经实现了的功能
- 创建N 个val
- 插入新数据
- 根据索引获得数据
- 删除最后一个数据;
删除索引对应的数据// 这段程序出错了半天找不到错误
``
在这里插入代码片 #include <iostream> using namespace std; template<class T> class Myvector { public: Myvector(int size, const T& val);//创建N 个val void m_push_back(const T& val);//插入新数据 T getAt(int index);//根据索引获得数据 void m_pop_back();//删除最后一个数据; //void m_delete(int index);//删除索引对应的数字 ~Myvector(); private: int m_size; T* p=NULL; }; template<class T> Myvector<T>::Myvector(int size, const T& val) { p = new T[size]; T *p1 = p; for (int i = 0; i < size; i++) { //p[i] = val; *p1 = val; p1++; } m_size = size; } template<class T> T Myvector<T> ::getAt(int index) { return p[index]; } template<class T> void Myvector<T>::m_pop_back() { m_size--; } //这里程序出现了问题 //template<class T> //void Myvector<T>::m_delete(int index) //{ // T* newP = new T[m_size-1];//创建新地址 // // T* newP1 = newP; // for (int i = 0; i < m_size; i++)//拷贝原始数据到新空间 // { // if (i != index) { // *newP1++ = *p++; // } // } // delete[]p;//释放旧地址 // p = newP;//赋值新地址 // m_size--; //} template<class T> void Myvector<T>::m_push_back(const T& val) { int new_size=m_size+1; T* newP = new T[new_size];//创建新地址 T* newP1 = newP; for (int i = 0; i < m_size; i++)//拷贝原始数据和新数据到新空间 { *newP1++ = *p++; } *newP1 = val; delete[]p;//释放旧地址 p = newP;//赋值新地址 m_size = new_size;//赋值新数据 } template<class T> Myvector<T>::~Myvector() { if(p!=NULL){ delete[]p; p = NULL; } } int main() { Myvector<int> v(1, 41); cout<<v.getAt(0)<<endl; v.m_push_back(55); cout << v.getAt(1) << endl; return 0; }
本文来自博客园,作者:开源侠,转载请注明原文链接:https://www.cnblogs.com/cyj22/p/17943409
微信公众号:青衫换酒吃
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本