基于模板写一个自己的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;
}




猜你喜欢

转载自blog.csdn.net/Aristotle__/article/details/121545295