1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
||||||
1 | ||||||
Как ускорить работу с файлами?31.08.2016, 10:51. Показов 7205. Ответов 56
Метки нет (Все метки)
Предполагается, что программа будет работать с файлами размера 300-500МБ. Эти обычные функции работают слишком медленно. Может быть стоит использовать чистый С, например?
1
|
31.08.2016, 10:51 | |
Ответы с готовыми решениями:
56
Как ускорить работу? Подскажите пожалуйста как ускорить работу программы! Можно ли как нибудь ускорить работу цикла for? Как ускорить работу (поиск вхождений подстроки)? |
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
||||||
31.08.2016, 23:46 [ТС] | 22 | |||||
Может быть дело в том, что уже почти полночь, но я не понимаю с чего он ругается. Я сделала вот так вот:
Код
1>------ Сборка начата: проект: Work, Конфигурация: Release Win32 ------ 1> main.cpp 1>D:\Programs\Visual Studio 2013 Express\VC\include\algorithm(2618): error C2893: Сбой при специализации функции-шаблона "unknown-type std::less<void>::operator ()(_Ty1 &&,_Ty2 &&) const" 1> Со следующими аргументами шаблона: 1> "_Ty1=char *const &" 1> "_Ty2=Line &" 1> D:\Programs\Visual Studio 2013 Express\VC\include\algorithm(2642): см. ссылку на создание экземпляров функции шаблон при компиляции "std::pair<Line *,Line *> std::_Equal_range<Line*,_Ty,__w64 int,_Pr>(_FwdIt,_FwdIt,const _Ty &,_Pr,_Diff *)" 1> with 1> [ 1> _Ty=char * 1> , _Pr=std::less<void> 1> , _FwdIt=Line * 1> , _Diff=__w64 int 1> ] 1> D:\Programs\Visual Studio 2013 Express\VC\include\algorithm(2655): см. ссылку на создание экземпляров функции шаблон при компиляции "std::pair<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Line>>>,std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Line>>>> std::equal_range<_FwdIt,_Ty,std::less<void>>(_FwdIt,_FwdIt,const _Ty &,_Pr)" 1> with 1> [ 1> _FwdIt=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Line>>> 1> , _Ty=char * 1> , _Pr=std::less<void> 1> ] 1> main.cpp(96): см. ссылку на создание экземпляров функции шаблон при компиляции "std::pair<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Line>>>,std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Line>>>> std::equal_range<std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Line>>>,char*>(_FwdIt,_FwdIt,const _Ty &)" 1> with 1> [ 1> _FwdIt=std::_Vector_iterator<std::_Vector_val<std::_Simple_types<Line>>> 1> , _Ty=char * 1> ] ========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
|
1379 / 406 / 144
Регистрация: 22.10.2014
Сообщений: 872
|
|
01.09.2016, 00:01 | 23 |
Керра, Зачем откапали char*? в первом посте все было чинно, красиво и благородно на std::string.
Не по теме: Слишком хорошо живете чтоли? :)
0
|
01.09.2016, 00:19 | 24 | |||||||||||||||
vector- ру стоит сразу делать reserve() (или даже сразу resize()) Керра, Поспешили вы портить код используя Си для начала стоило убрать seekg и возможно распоточить может этого было бы достаточно. Добавлено через 1 минуту Жрем память и ресурсы копированием. Еще раз задача- ускорить и не получить бед.аллок. Добавлено через 1 минуту
2
|
Nosey
|
01.09.2016, 00:30
#25
|
0
|
64 / 68 / 18
Регистрация: 21.10.2015
Сообщений: 228
|
|
01.09.2016, 01:35 | 26 |
может помочь unsafe
0
|
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
|
01.09.2016, 18:14 [ТС] | 27 |
действительно... полночь сказалась...
потому что раз там сортировка использует оператор <, и мы ей передаем char*, значит оператор < тоже нужно делать относительно char*, я думаю. непонятно почему это не помогло вчера... но доделывать уже в любом случае буду завтра, посмотрим что получится.
0
|
01.09.2016, 19:08 | 28 | ||||||||||||||||||||||||||||||
Сообщение было отмечено MayaNash как решение
Решение
Относительно двух char*-ов.
Добавлено через 5 минут
Хотя конечно я вероятно не особо въезжаю в твой код и то что ты хочешь сделать. У тебя строка файла состоит из трех строковых значений разделенных ":" По двум идет сравнение - третье - искомое значение. Отличие между двумя файлами только в порядке следования. Я вижу задачу приблизительно так:
0
|
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
|
02.09.2016, 15:46 [ТС] | 29 |
Вот иногда перечитываю свой вчерашний/позавчерашний код, и такое ощущение появляется, что я была сильно нездорова...
Добавлено через 11 секунд Это тот случай... Добавлено через 10 секунд Зачем же я так усложнила?.. Добавлено через 2 минуты Avazart, сейчас вот я переписала, и получилось почти как у вас, за исключением структуры Line...
0
|
02.09.2016, 15:57 | 30 |
Добавлено через 7 минут Я использовал std::pair<std::string,std::string> key; для наглядности, а вообще операторы сравнения стоит переписать на strcmp из-за чтения scanf, как я писал в комментариях.
0
|
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
||||||
02.09.2016, 16:02 [ТС] | 31 | |||||
ясное дело
у меня вот так вот получилось, и теперь все ясно и понятно, только с чтением строк надо что-то сделать - читает всю строку в одну переменную, не понимает что двоеточие это разделитель
я так думаю, со string все же лучше было)))
0
|
02.09.2016, 16:19 | 32 | ||||||||||
Ну как в моем примере - меньше кода получается. просто для сравнения использовать strcmp(s1.c_str(),s2.c_str())
Добавлено через 2 минуты Честно говоря я не помню как c scanf управлятся, предположу что нужно
Добавлено через 4 минуты Кроме того вектор лучше передавать по ссылке (и возвращать тоже- не через return а параметром) в ф-ции.
1
|
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
|
02.09.2016, 16:20 [ТС] | 33 |
0
|
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
|
02.09.2016, 16:31 [ТС] | 35 |
да, об этом уже вспомнила, спасибо)
0
|
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
||||||
02.09.2016, 16:33 [ТС] | 36 | |||||
Вроде все хорошо, только Игоря он почему-то не находит
0
|
02.09.2016, 17:37 | 37 | |||||||||||||||
Сообщение было отмечено MayaNash как решение
Решение
Думаю операторы сравнения реализованы не верно, проверьте:
1
|
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
|
02.09.2016, 18:41 [ТС] | 38 |
мозги за лето атрофировались
Добавлено через 9 минут спасибо большое, теперь работает
0
|
1296 / 469 / 151
Регистрация: 24.08.2011
Сообщений: 2,249
|
|
02.09.2016, 20:03 [ТС] | 40 |
скорость конечно увеличилась, пока что еще ускорить не просят
0
|
02.09.2016, 20:03 | |
02.09.2016, 20:03 | |
Помогаю со студенческими работами здесь
40
Переделать работу с текстовыми файлами под работу с двоичными файлами Динамический массив, много циклов и простые числа. Как ускорить работу программы ? Ускорить работу программы Ускорить работу функций Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |