我正在尝试为使用指针数组来存储对象的数组类创建一个remove函数。
所以我得到的是一个指向对象的指针列表:
objname* list = new objname[100];
注意,它被声明为类的成员,我们称之为myClass。
我想要的是为myClass创建一个以索引作为参数的函数,并从该索引的列表中删除该对象。这就是我所拥有的以及我想做的事情。
void myClass::remove(int index)
{
objname* temp = new objname[listlen]; //creating a temporary list to copy values from the "main" list.
//want to copy elements from 0 to index in "this->list" and store inside temp, then skip one element and copy the rest.
}
可能有更好的方法来获得此功能,如果是这样,我愿意接受建议。
答案 0 :(得分:5)
我想要的是为myClass创建一个以索引作为参数的函数,并从该索引的列表中删除该对象。
您可以使用std::vector
和std::next
#include <vector> // for std::vector
#include <iterator> // for std::next
std::vector<objname> v;
void myClass::remove(int index)
{
v.erase(std::next(v.begin(), index));
}
显然,您应首先检查向量是否足够大index
。
但是,如果您真正想要做的是将一个数组的一部分复制到另一个数组中,您可以使用标准库组件轻松完成此操作:
std::vector<objname> v = ...;
std::vector<objname> temp(v.begin(), std::next(v.begin(), index));
此处,temp
将包含index
的第一个v
元素的副本。
答案 1 :(得分:1)
如果你使用数组并且还不允许使用std :: vector那么你可以通过应用两次标准算法std :: copy
来完成任务例如,(我认为listlen是原始数组的大小)
#include <algorithm>
//...
objname* temp = new objname[listlen - 1];
std::copy( std::next( list + index ), list + listlen,
std::copy( list, list + index, temp ) );
表达式std :: next(list + index)可以替换list + index + 1,前提是两个表达式的索引都小于listlen。