Бысрый способ получить 100 наименьших элементов, из 10 000 000 000 записей или более |
Здравствуйте, гость ( Вход | Регистрация )
Бысрый способ получить 100 наименьших элементов, из 10 000 000 000 записей или более |
Алексей1153 |
24.8.2010, 17:44
Сообщение
#31
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
|
|
|
panter_dsd |
24.8.2010, 17:56
Сообщение
#32
|
Жаждущий знаний Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: 3 |
Готово. Сделал для любого кол-ва элементов. Хотелось бы еще для любого типа.
Хотелось бы мнение узнать о правильности кода, а то stl только недавно начал учить. |
|
|
Алексей1153 |
24.8.2010, 18:54
Сообщение
#33
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
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 |
|
|
panter_dsd |
24.8.2010, 19:50
Сообщение
#34
|
Жаждущий знаний Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: 3 |
1. Учту.
2. Согласен. 4. Учту. 5. Не согласен. Можно и нужно, если контейнер не изменяется. Зачем дергать функцию на каждой итерации? 6. Вполне получается. Что смущает? |
|
|
Алексей1153 |
24.8.2010, 19:59
Сообщение
#35
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
5 - в релизе там не будет функции Так что, дёргай без опаски
6 - ну, раз получается, тогда пользуйся на здоровье. У меня компилятор брыкается )) Ну оно и понятно |
|
|
panter_dsd |
24.8.2010, 20:00
Сообщение
#36
|
Жаждущий знаний Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: 3 |
6. Компилятор ничего не говорит. По документации тоже можно, вроде бы. Завтра перепроверю.
|
|
|
Алексей1153 |
24.8.2010, 20:06
Сообщение
#37
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
всё, 6 - мой косяк )) Исправил . Пропустил начальный итератор и не обратил внимание
Сообщение отредактировал Алексей1153 - 24.8.2010, 20:08 |
|
|
kwisp |
24.8.2010, 20:33
Сообщение
#38
|
астарожна ынтжинэр Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: 23 |
4) проверяй v.size()!=0 для любых контейнеров перед получением итератора или ссылки (.begin(),end(),[x] и так далее) мои пять копеек. я вот тоже в stl недавно стал вникаить. так меерс советует в 4 совете использовать empty() вместо сравнения size() с нулем из-за постоянного времени выполнения функции. stl |
|
|
Алексей1153 |
24.8.2010, 20:47
Сообщение
#39
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
kwisp, ок, учтём ) Только обычно у меня такой вызов был не в цикле, а list ещё не доводилось пользоваться почему то ))
|
|
|
panter_dsd |
25.8.2010, 6:40
Сообщение
#40
|
Жаждущий знаний Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: 3 |
Алексей1153, что-то не компилируется твой код.
|
|
|
Текстовая версия | Сейчас: 28.11.2024, 11:05 |