自定义向量的清除功能
Custom vector's clear function
template <class DataType> /// Declaring the template class Datatype
class Vector
{ public:
Vector()
{m_data = new DataType[9999];
m_size = 1;
m_current = 0;
}
Vector(int size) /// Constructing vector
{ m_data = new DataType[size];
m_size = size;
m_current = -1;
}
///////////////////////////////////////
/// Creating Push and Pop methods
///////////////////////////////////////
bool push(const DataType data)
{ if (m_current < m_size)
{ m_current++;
m_data[m_current] = data;
return true;
}
else
{ return false; }
}
bool pop(DataType &data)
{ if (m_current==-1)
{ cout << "Nothing to pop";
return false;
}
else
{ data = m_data[m_current];
m_current--;
return true;
}
}
///////////////////////////////////////
/// Methods to access the private m_data
///////////////////////////////////////
float retrievefloat(int pointer)
{
return m_data[pointer];
}
string retrievestring(int pointer)
{
return m_data[pointer];
}
int retrieveint(int pointer)
{
return m_data[pointer];
}
int retrievecurrent()
{
return m_current;
}
int retrievesize()
{
return m_size;
}
private:
DataType* m_data;
int m_size;
int m_current;
};
好的,这里我们有一个自定义的模板化向量类。这里的问题是,我希望包含一个clear()
函数。我知道你几乎可以做int m_size = 0
和int m_current = -1
.但是你如何重置m_data呢?
当我想在调用clear
函数后再次推送数据时,尝试delete [] m_data
会使程序崩溃。
我应该从哪里开始...现在,这不是一个向量类,而是一个堆栈类。
代码存在很多问题,但为了解决初始问题,不应删除clear()
方法中的m_data。通常,类的用户不会读取已推送范围之外的对象,因此无需删除或重新分配。此外,由于所有且仅构造函数设置并向量的大小并分配它,因此您希望它不会更改,并假设始终分配m_data缓冲区。清除后,将没有地方推送您的数据!
标准,以下是它可能是什么:
void clear()
{
m_current = -1;
}
看看这个经过修订但远未完成的片段。祝您完成它很开心...
template<typename DataType> /// Declaring the template class Datatype
class Vector
{
public:
Vector(size_t size = 9999) /// Constructing vector
{
if (size == 0)
{
size = 9999;
}
m_data = new DataType[size];
m_size = size;
m_current = -1;
}
void clear()
{
m_current = -1;
}
///////////////////////////////////////
/// Creating Push and Pop methods
///////////////////////////////////////
bool push(const DataType data)
{ if (m_current < m_size)
{ m_current++;
m_data[m_current] = data;
return true;
}
else
{ return false; }
}
bool pop(DataType &data)
{ if (m_current==-1)
{ cout << "Nothing to pop";
return false;
}
else
{ data = m_data[m_current];
m_current--;
return true;
}
}
///////////////////////////////////////
/// Methods to access the private m_data
///////////////////////////////////////
bool retrieveat(size_t index, DataType &data)
{
if (index>=m_size)
{
return false;
}
data = m_data[index];
return true;
}
int retrievecurrent()
{
return m_current;
}
size_t retrievesize()
{
return m_size;
}
private:
DataType* m_data;
size_t m_size;
int m_current;
};
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 我应该实现右值推送功能吗?我应该使用std::move吗
- QML按钮点击功能执行顺序
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 有没有可能有一个只有ADL才能找到的非好友功能
- 功能样式转换从 'int' 到 'ItemType' 的匹配转换
- 文件系统:复制功能的速度秘诀是什么
- 清除前检查矢量
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 当程序输入主要功能时,为什么要清除此std ::向量
- 是否可以实现std ::移动和清除功能
- 具有自动清除功能的中央注册表中对象的句柄
- 自定义向量的清除功能