Функция в порядке, тема достигнута. Всем спасибо.C++ Смещение массива указателей на структуры
У меня есть следующая очень простая структура внутри класса:
struct Data
{
string name1;
string name2;
string name3;
string name4;
}
инициализирует:
Data **data;
data=new Data*[size];
Проблема заключается в том переложить все указатели на элементы массива с позиции N справа, так что я могу вставить новый элемент в 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].
Это домашнее задание? Кроме того, вы дали нам * код, который работает *, но не тот, который этого не делает? – mfontanini
Я обновил свой ответ. Проверь это. – JalalJaberi
Любая причина, по которой вы не используете 'std :: vector'? – mfontanini