基于模板写一个自己的vector,傻瓜版本

已经实现了的功能

  1. 创建N 个val
  2. 插入新数据
  3. 根据索引获得数据
  4. 删除最后一个数据;
  5. 删除索引对应的数据// 这段程序出错了半天找不到错误

``

在这里插入代码片
#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;
}
posted on   开源侠  阅读(3)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
点击右上角即可分享
微信分享提示