Раз пошла такая особая логика
May. 13th, 2009 03:39 pmФён.
(C++) Есть у нас объекты двух классов: Master и Slave. У Slave есть метод Master* getMaster(). Есть у нас два списка указателей на эти классы: masterList и slaveList, причем известно, что на каждый объект из masterList ссылается не более одного объекта из slaveList. Нужно построить какой-нибудь sortedSlaveContainer (той же мощности, что и masterList), в котором для любого не-NULL элемента его расстояние от головы контейнера равно расстоянию его мастера от головы masterList.
Индийское решение:
1. Создаем вектор структур (Master*master, Slave*slave, int index), заполняем из masterList, инкрементируя index. Поле slave = NULL.
2. Сортируем этот вектор по значению указателя master.
3. Проходим по slaveList, находя соответствующий Master в векторе с помощью двоичного поиска (std::lower_bound!) и заполняя поле slave.
4. Сортируем вектор по полю index.
5. Из полей slave полученного вектора создаем sortedSlaveList.
6. Profit!
(C++) Есть у нас объекты двух классов: Master и Slave. У Slave есть метод Master* getMaster(). Есть у нас два списка указателей на эти классы: masterList и slaveList, причем известно, что на каждый объект из masterList ссылается не более одного объекта из slaveList. Нужно построить какой-нибудь sortedSlaveContainer (той же мощности, что и masterList), в котором для любого не-NULL элемента его расстояние от головы контейнера равно расстоянию его мастера от головы masterList.
Индийское решение:
1. Создаем вектор структур (Master*master, Slave*slave, int index), заполняем из masterList, инкрементируя index. Поле slave = NULL.
2. Сортируем этот вектор по значению указателя master.
3. Проходим по slaveList, находя соответствующий Master в векторе с помощью двоичного поиска (std::lower_bound!) и заполняя поле slave.
4. Сортируем вектор по полю index.
5. Из полей slave полученного вектора создаем sortedSlaveList.
6. Profit!
no subject
Date: 2009-05-14 12:05 am (UTC)no subject
Date: 2009-05-14 12:30 am (UTC)no subject
Date: 2009-05-14 12:52 am (UTC)no subject
Date: 2009-05-14 12:58 am (UTC)no subject
Date: 2009-05-14 01:08 am (UTC)no subject
Date: 2009-05-14 01:28 am (UTC)no subject
Date: 2009-05-14 02:22 pm (UTC)1. Делаем malloc нового массива
2. Делаем strncpy первых двух символов на новое место.
3. Создаем массив из двух символов. Туда засовываем новый третий символ и \0.
4. Делаем strcat нового массива с третим символом.
5. Делаем strcat хвоста изначальной строки.
6. Делаем strcpy на изначальное место.
7. Profit!
no subject
Date: 2009-05-14 02:30 pm (UTC)no subject
Date: 2009-05-14 04:02 pm (UTC)while (1 == fscanf (file, "%c", &buffer[i])) i++;
no subject
Date: 2009-05-14 04:07 pm (UTC)no subject
Date: 2009-05-14 04:26 pm (UTC)