//myvector.h
#pragma once
template<class T>
class myvector
{
public:
myvector();
~myvector();
void push_back(T t);
T* find(T t);
void show();
void change(T* pos, T t);
void del(T t);
void insert(int pos,T t);
T operator [](int i);
public:
T* p;
int n;
int reallen;
};
//myvector.cpp
#include "myvector.h"
#include <iostream>
using namespace std;
/*
myvector();
~myvector();
void push_back(T t);
T *find(T t);
void show();
void change(T *pos, T t);
void del(T t);
void insert(T *pos,T t);
*/
template<class T>
myvector<T>::myvector()
{
p = nullptr;
n = reallen = 0;
}
template<class T>
myvector<T>::~myvector()
{
if (p != nullptr)
{
delete[]p;
n = reallen = 0;
}
}
//从尾部插入数据
template<class T>
void myvector<T>::push_back(T t)
{
if (p == nullptr)
{
p = new T;
*p = t;
n = reallen = 1;
}
else
{
T* ptemp = new T[n + 1];
for (int i = 0;i < n;i++)
{
ptemp[i] = p[i];
}
delete[]p;
p = ptemp;
p[n] = t;
reallen += 1;
n += 1;
}
}
//查找数据元素返回位置
template<class T>
T* myvector<T>::find(T t)
{
for (int i = 0;i < reallen;i++)
{
if (p[i] == t)
{
return p + i;
}
}
return nullptr;
}
//打印数据元素
template<class T>
void myvector<T>::show()
{
if (p == nullptr)
{
return;
}
for (int i = 0;i < reallen;i++)
{
cout << "p[" << i<<"]="<<p[i] << endl;
}
}
//改变数据元素
template<class T>
void myvector<T>::change(T *pos, T t)
{
if (pos == nullptr)
{
return;
}
else
{
*pos = t;
}
}
//删除数据
template<class T>
void myvector<T>::del(T t)
{
int pos = -1;
for (int i = 0;i < reallen;i++)
{
if (p[i] == t)
{
pos = i;
break;
}
}
if (pos != -1)
{
if (pos == reallen - 1)
{
reallen -= 1;
}
else
{
for (int i = pos;i < reallen - 1;i++)
{
p[i] = p[i + 1];
}
}
}
}
//插入数据
template<class T>
void myvector<T>::insert(int pos, T t)
{
if (pos>0 && pos<= n)
{
//重新分配内存并拷贝
T *ptemp = new T[n + 1];//重新分配内存
for (int i = 0; i < n; i++)
{
*(ptemp + i) = *(p + i);//拷贝
}
delete []p;
p = ptemp;
reallen += 1;
n += 1;
}
for(int i = reallen-2;i>=pos;i--)
{
p[i+1] = p[i];//往前移动
}
p[pos] = t;
}
//重载操作符
template<class T>
T myvector<T>::operator[](int i)
{
if (i < 0 || i >= reallen)
{
return NULL;
}
return p[i];
}
//main.cpp
#include "myvector.h"
#include "myvector.cpp"//模板需包含实体
#include<iostream>
using namespace std;
void main()
{
myvector<int> myv;
myv.push_back(12);
myv.push_back(15);
myv.push_back(13);
myv.push_back(10);
myv.insert(2,9);
cout<<myv.find(12)<<endl;
myv.change(myv.find(13),8);
myv.show();
cin.get();
}
C++学习总结——vector容器的实现
最新推荐文章于 2024-07-28 23:14:56 发布