![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
ViGOur |
![]()
Сообщение
#1
|
![]() Мастер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: ![]() ![]() ![]() |
Задача получить 100 наименьших элементов из массива в 10 000 000 000 записей, записи это числа.
Как это сделать, побыстрей? |
|
|
![]() |
Алексей1153 |
![]()
Сообщение
#2
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
1)
Цитата if (n >= v.size ()) "size()" имеет тип unsigned int , а "n" у тебя - int 2) Передавать и возвращать контейнеры лучше по ссылке (а то нехилое по объёму копирование будет иногда происходить) Поэтому, лучше не возвращать из функции тип std::list<T> , а объявить переменную вне функции, а потом передать ссылку для заполнения контейнера в функции 3)объявление переменных-контейнеров частенько громоздкие - лучше определить синоним typedef std::list<T> td_LIST; это также поможет вносить быстрые исправления, если что. Но в данном примере это не сильно существенно - код небольшой 4) проверяй v.size()!=0 для любых контейнеров перед получением итератора или ссылки (.begin(),end(),[x] и так далее) 5) нет нужды делать вот так (и вообще нельзя) .... eEnd = v.end (); eIt != eEnd...... надо .... ; eIt != v.end()...... Цитата list_out.insert (v.begin (), v.begin () + n);//<< не получится так вставить из вектора в список. Надо - либо одинаковый тип делать, либо цикл Раскрывающийся текст
Сообщение отредактировал Алексей1153 - 24.8.2010, 20:07 |
|
|
![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 14.4.2025, 16:45 |