【发布时间】:2012-12-11 01:50:52
【问题描述】:
我正在创建一个自定义矢量类作为家庭作业的一部分。我目前正在尝试做的是实现一个名为erase的函数,它将一个整数作为参数,将我的数组长度减1,删除参数指定位置的元素,最后将所有元素向下移动以填充在“已擦除”元素留下的空白处。
由于我缺乏使用这种语言的经验,我不完全理解的是如何从指针数组中删除单个元素。
目前,我实现了以下内容:
void myvector::erase(int i)
{
if(i != max_size)
{
for(int x = i; x < max_size; x++)
{
vec_array[x] = vec_array[x+1];
}
vec_size --;
//delete element from vector;
}
else
//delete element from vector
}
类声明和构造函数如下所示:
template <typename T>
class myvector
{
private:
T *vec_array;
int vec_size;
int max_size;
bool is_empty;
public:
myvector::myvector(int max_size_input)
{
max_size = max_size_input;
vec_array = new T[max_size];
vec_size = 0;
}
我尝试了以下方法:
-
使用 delete 尝试删除元素
删除vec_size[max_size];
vec_size[max_size] = NULL;
-
将元素的值设置为 NULL 或 0
vec_size[max_size] = NULL
或
vec_size[max_size] = 0
由于运算符“=”不明确或指定类型无法转换为 void *,因此这些都不适合我。
我可能遗漏了一些简单的东西,但我似乎无法通过这个。任何帮助将非常感激。再次,如果这是愚蠢的事情,很抱歉缺乏经验。
【问题讨论】:
-
您没有在此处使用指针数组,而是在使用对象数组。因此,您不需要删除任何内容 - 只需覆盖元素并缩小向量。另外,在对象的析构函数中调用
delete[] vec_array,看起来你的大小逻辑也有一个错误。 -
是的。您在尺寸错误中是正确的。谢谢你。已编辑。
-
@Johnny 看来您是 SO 新手(这是您的第一个问题。)请记住对对您有帮助的答案投票并接受对您最有帮助的答案。
标签: c++ arrays pointers vector