#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];
}
动态数组的模板实现
最新推荐文章于 2022-07-06 14:10:02 发布