0

现在功能OK了,主题实现了。谢谢大家。

我在类中有以下非常简单的结构:

struct Data
{
    string name1;
    string name2;
    string name3;
    string name4;
}

我初始化:

Data **data;
data=new Data*[size];

问题是将所有指向数组元素的指针从位置 N 移到 right,这样我就可以在 N 中插入一个新元素。我尝试了各种方法,但一切都以指向的元素数组结束同一个对象...

我有类似的功能,它删除元素并将所有内容向左移动。它工作正常:

int Del_element(/*some parameters*/)
{
    found=Bin_search(Name1,Name2); //binary search. Returns index of element.
    if (found<0) return 0; //element wasn't found

    delete data[found]; //delete pointer
    for (int i=found; i<index-1; i++) //shift all pointers to the left
    {
        data[i]=data[i+1];
    }
    index--;
    return 1;
}

我实现的功能如下:

void re_size() 
{
int size_old=size;
size*=2;
Data **tmp_array;

tmp_array = new Data*[size];

copy(data, data+size_old, tmp_array);
delete []data;
data=new Data*[size];
data=tmp_array;
}



 int Add( const string & Name1,const string & Name2,const string & Name3, const string & Name4 )
    {
        int found=Bin_search(Name1,Name2); //binary search. Return positive number if found, or negative as the position to insert new element;

  if (found>0)  //if element already exists
  {
      return 0;
  }


if ((index+1)==size) {re_size();}

data[index]= new Record(Name1,Name2,Name3,Name4);
if (index>0)
{
  for (int i=index; i>-found; i--)
  {
   *data[i]=*data[i-1];
  } 

  data[-found]->name1=Name1;
  data[-found]->name2=Name1;
  data[-found]->name3=Name1;
  data[-found]->name4=Name1;
}

 index++; 
 return 1;
}

基本上,我在数组末尾初始化新元素,然后将元素从数组末尾复制到找到的位置并将值复制到数据 [-found]。

4

2 回答 2

0

你没有显示非工作代码,所以我不得不猜测你做错了什么。

我敢打赌你将元素 0 转换为 1、1 转换为 2、2 转换为 3 等等。但是当你将 1 转换为 2 时,它包含原来在 0 中的内容。然后当你将 2 转换为 3 时,它包含你的内容只是从 1 转移,原来是 0。依此类推。

您需要从最后开始进行转换:N-1 到 N,N-2 到 N-1,N-3 到 N-2,等等。

您要转移的东西是指针这一事实完全无关紧要,对于数字数组,您也会遇到同样的问题。

于 2013-03-30T01:15:39.163 回答
0

首先,Del_element函数在这里为新的传入指针删除一个元素。如果是真的,那么它就不起作用,因为你只是data[first]用新的元素()占据了释放的元素( data[first+1])。

但是,如果你应该确定你的意思是N等于size并且新的传入指针必须是大小的地方,那没关系。

但是,您必须显示真实且更完整的代码。

好的,这样更好。首先,我认为在具有返回类型false的函数中返回并不是那么好。int其次,我觉得这里有很大的问题for (int i=index-1; i>-found; i--)。为什么i>-found

于 2013-03-30T01:36:49.457 回答