NetLab · Rules · Torrent Tracker · Have a problem? · Eng/Rus | Help Search Members Gallery Calendar |
Welcome Guest ( Log In | Register | Validation ) | Resend Validation Email |
Pages: (5) [1] 2 3 4 5 > ( Show unread post ) |
страдания по c++ |
|
Posted: 19-03-2013, 15:16
(post 1, #1073291)
|
||
Коллекционер Group: Global Moders Posts: 10401 |
У нас есть здесь спецы в c++? Я тут начал работать По профессии я математик, но програмировать надо больше чем считать. Пока проект не начался, я хотел немножко подготовиться. задача стоит простая: считать с определённой директории список файлом и записать его в array/list делал так, но ничего не выдаёт:
как же я скучаю по c# )) |
||
|
Posted: 20-03-2013, 00:15
(post 2, #1073331)
|
||
Part time flamer Group: Read Only Posts: 7784 Warn:0% |
1. (и главное) Нафига тебе MesssageBox причем в програме которая явно консольная - хрена он что выдаст. поменяй например на cout или printf или поменяй проект на Win32, но первый вариант проще. 2. В фолдере задать маску , типа "*.*" или "." а не только путь. 3. Не забудь проверку если не нашло ничего первый раз 4. Не забывай инициализировать переменные и обнулять структуры. К твоим проблемам это не имеет никакого отношения но это правильная практика. This post has been edited by Lord KiRon on 20-03-2013, 00:15 |
||
|
Posted: 20-03-2013, 00:45
(post 3, #1073333)
|
||
Коллекционер Group: Global Moders Posts: 10401 |
|
||
|
Posted: 20-03-2013, 13:07
(post 4, #1073350)
|
||
Коллекционер Group: Global Moders Posts: 10401 |
|
||
|
Posted: 20-03-2013, 19:57
(post 5, #1073356)
|
||
Part time flamer Group: Read Only Posts: 7784 Warn:0% |
Хэндл инвалидный , значит или путь неверный или файлов не найдено. Хотя не понятно на каком этапе ты делал скриншот. Да, и еще чтоб было проще дебагировать - выруби юникод в настройках прокта. This post has been edited by Lord KiRon on 20-03-2013, 20:01 |
||
|
Posted: 21-03-2013, 10:34
(post 6, #1073371)
|
||
Visionary Group: Members Posts: 5181 Warn:0% |
Вспомнил, почему не перевариваю С++ http://msdn.microsoft.com/en-us/library/windows/desktop/aa365200%28v=vs.85%29.aspx |
||
|
Posted: 21-03-2013, 17:07
(post 7, #1073378)
|
||
Коллекционер Group: Global Moders Posts: 10401 |
Но не расслабляйтесь, всё только наинается= |
||
|
Posted: 23-03-2013, 00:50
(post 8, #1073457)
|
||
Part time flamer Group: Read Only Posts: 7784 Warn:0% |
|
||
|
Posted: 30-03-2013, 15:31
(post 9, #1074041)
|
||
Коллекционер Group: Global Moders Posts: 10401 |
Продолжимс Прога, что я пишу занимается парсингом гиганских файлов. Обычно файлы с 1мио строк, а то и более. задача строку считать и разбить по запятой. std::vector<std::string> results while(getline(ss.str,separator) { results.push_back(str); } и этот грёбанный пушбек жрёт 90% моего времени. Я пробывал сначала толкать в лист, в нём судя по описанию пушбек добрее, а потом коппировать в вектор. Но что-то всё стало медленнее чем)))) Можно ли как-то это обойти? |
||
|
Posted: 31-03-2013, 01:07
(post 10, #1074078)
|
||
Part time flamer Group: Read Only Posts: 7784 Warn:0% |
Тебе повезло что ты это не на .Net делаешь. А вообще при таком подходе жрется до хрена памяти, тут так прямо и не решить, надо в зависимости от ситуации и использования. Например хранить в вкторе не стринги а позиции запятых. |
||
|
Posted: 31-03-2013, 02:14
(post 11, #1074083)
|
||
Коллекционер Group: Global Moders Posts: 10401 |
|
||
|
Posted: 31-03-2013, 07:45
(post 12, #1074086)
|
||
Visionary Group: Members Posts: 5181 Warn:0% |
Определи число строк в файле, сразу создай вектор нужного размера и пиши в него напрямую, как в массив: results[n] = ... |
||
|
Posted: 31-03-2013, 11:42
(post 13, #1074091)
|
||
Коллекционер Group: Global Moders Posts: 10401 |
|
||
|
Posted: 31-03-2013, 17:49
(post 14, #1074116)
|
||
Part time flamer Group: Read Only Posts: 7784 Warn:0% |
Если ты утверждаешь что память вообще не проблема , то открывай файл черз mapped view (чтоб он при доступе "выглядел" как бафер, а не файл) и сохраняй позиции запятых в файле в отдельный вектор. Походу можно не пользоватся вектором а хранить в массиве используя doubling, то есть держишь массив созданный через new скажем на 1000 мест и переменную "индекс" последнего свободного места + переменную размера массива. Если дошел до последнего (1000-го) то создаешь новый массив в два раза большр (то-есть 2000) и копируешь в него старый memcopy , а старый освобождаешь и так далее... операции подстановки лонгов в массив почти мгновенные, копирование непрерывного блока памяти тоже операция достаточно быстрая и в принципе будет (при правильно выбранном начальном размере) достаточно редкой. Если память вообще не ограничена можешь создать массив вообще один раз - размером с файл, тогда точно ничего и копировать не придется This post has been edited by Lord KiRon on 31-03-2013, 17:50 |
||
|
Posted: 31-03-2013, 23:53
(post 15, #1074131)
|
||
Сварливый Мозг Клуба Group: Roots Posts: 22885 |
я не понял. ты считываешь весь файл и засовываешь его в вектор. А нахрена? Считал строку, обработал и пошел дальше. Зачем ты хранишь все прочитанные строки? Ну и таки если уж так хочется засовывать весь файл в память (несколько странно в этом разрезе говорить о гигантских файлах), то ты-бы место в векторе выделял крупными кусками. А то для каждой строки вызывается реаллокация памяти, ибо вектор переполнился. Выделил место по 1000 строк - считал 1000. Потом снова выделил одним разом еще под 1000. И так далее. Ну, или если строк всегда более миллиона, то можно не по 1000, а по 100.000 за итерацию. |
||
Pages: (5) [1] 2 3 4 5 > |