复制指针数组并跳过某些索引

时间:2014-02-04 23:03:41

标签: c++ arrays algorithm

我正在尝试为使用指针数组来存储对象的数组类创建一个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.

}

可能有更好的方法来获得此功能,如果是这样,我愿意接受建议。

2 个答案:

答案 0 :(得分:5)

  

我想要的是为myClass创建一个以索引作为参数的函数,并从该索引的列表中删除该对象。

您可以使用std::vectorstd::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。