动态数组的模板实现

#pragma once
#include <iostream>
#include<assert.h>
//动态数组模板,不含迭代器的实现
template<typename Data>
class Myvector
{
public:
	Myvector();
	~Myvector();
	//插入
	void push_back(Data value);
	//删除
	void remove(Data value);
	//删除按位置
	void erase(int pos);
	//按值查找
	int find_array(Data value);
	//清空元素
	void Clear();	
	//按位置取值
	Data At(int pos);
	//获取容量
	int Get_capacity();
	//获取大小
	int Get_size();
private:
	Data* m_pAddr;
	int m_capacity;
	int m_size;
};

template<typename Data>
Myvector<Data>::Myvector()
{
	m_size = 0;
	m_capacity = 9;
	m_pAddr = new Data[m_capacity];
}
template<typename Data>
Myvector<Data>::~Myvector()
{
	delete m_pAddr;
}
//插入
template<typename Data>
void Myvector<Data>::push_back(Data value)
{

	assert(m_pAddr);
	if (m_size == m_capacity)
	{
		Data* pNewSpace = new Data[m_capacity * 2];
		assert(pNewSpace);
		memcpy(pNewSpace, m_pAddr, sizeof(Data) * m_size);
		delete m_pAddr;
		m_pAddr = pNewSpace;
		m_capacity = m_capacity * 2;
	}
	m_pAddr[m_size] = value;
	m_size++;
}
//删除
template<typename Data>
void Myvector<Data>::remove(Data value)
{
	int pos = find_array(value);
	erase(pos);
}
template<typename Data>
void Myvector<Data>::erase(int pos)
{

	assert(m_pAddr);
	if (pos < 0 || pos >= m_size)
	{
		std::cerr << "pos invalid!" << std::endl;
		return;
	}
	for (int i = pos; i < m_size; ++i)
	{
		m_pAddr[i] = m_pAddr[i + 1];
	}
	m_size--;

}
template<typename Data>
int Myvector<Data>::find_array(Data value)
{
	assert(m_pAddr);
	for (int i = 0; i < m_size; ++i)
	{
		if (m_pAddr[i] == value)
			return i;
	}
	return -1;
}
//清空数组元素
template<typename Data>
void Myvector<Data>::Clear()
{
	m_size = 0;
}
template<typename Data>
int Myvector<Data>::Get_capacity()
{
	return m_capacity;
}
template<typename Data>
int Myvector<Data>::Get_size()
{
	return m_size;
}
template<typename Data>
Data Myvector<Data>::At(int pos)
{
	if (pos < 0 || pos >= m_size)
	{
		std::cerr << "pos invalid!" << std::endl;
		return -1;
	}
	return m_pAddr[pos];
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值