Это лучший способ перебрать два односвязных списка разного размера и статический массив?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Это лучший способ перебрать два односвязных списка разного размера и статический массив?

Сообщение Anonymous »

Я пытаюсь использовать только стандартный код C++11, и у меня есть две такие структуры:

Код: Выделить всё

struct ExampleObject{
string name;
int somethingElse;
};
struct Node{
ExampleObject exampleObject;
Node* next;
};
А также 2 односвязных списка объектов типа Node (на которые указывают «head1» и «head2»), отсортированных в порядке возрастания по «имени».

Теперь я хочу объединить эти два списка в статический массив (зная, что в обоих списках никогда не будет более 1000 элементов), по-прежнему отсортированный по имени. Дело в том, что я заранее не знаю, сколько элементов в списках, и они могут быть разного размера.
Я подумал о чем-то вроде этого: начать перебирать списки, узел за узлом, и сравнивать их с найдите меньшее значение и вставьте его в массив. Как только один из списков достигает конца, я продолжаю перебирать другой, вставляя каждый элемент в массив.

Это мой код, но я его чувствую содержит много повторяющихся инструкций и, возможно, есть лучший способ решить эту проблему:

Код: Выделить всё

ExampleObject staticArray[1000];
int i=0;
while ((i!=1000) and (head1!=nullptr) and (head2!=nullptr)){
if (head1->exampleObject.name < head2->exampleObject.name){
staticArray[i]=head1->exampleObject;
head1=head1->next;
}
else{
staticArray[i]=head2->exampleObject;
head2=head2->next;
}
i++;
}
if (head1==nullptr)
while ((head2!=nullptr) and (i!=1000)){
staticArray[i]=head2->exampleObject;
head2=head2->next;
i++;
}
else
if (head2==nullptr)
while ((head1!=nullptr) and (i!=1000)){
staticArray[i]=head1->exampleObject;
head1=head1->next;
i++;
}
Есть ли лучший способ переписать эти инструкции в более «сжатом» виде, чтобы немного привести их в порядок?

Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/404 ... t-size-and
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»