| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > std::search и std::istream_iterator |
| Автор: X-3R1 8.4.2009, 10:48 | ||||
Вопрос почему появляется эксепшн в подобном случае:
Протрассировал std:: search, эксепшн в функции:
Эксепшн, на второй итерации основного цикла, почему-то при ++_First1, _First1 (входной итератор) становится невалидным. Ошибка при разыменовывании _Mid1. Другие алгоритмы, типа std::find работают |
| Автор: mrbrooks 8.4.2009, 11:16 | ||||
| X-3R1, сливай из файла сначало в контейнер из файла в тот же вектор (через std::copy), а затем уже в этом векторе ищи значения из blok. Тебе нужен еще итератор для определения - нашел ли что или нет std: Добавлено через 49 секунд гы. смайл заменил
Добавлено через 1 минуту и 34 секунды фак.
|
| Автор: X-3R1 8.4.2009, 11:19 |
| Угу это как вариант, но так бы не хотелось временную память создавать ( |
| Автор: Lazin 8.4.2009, 11:23 |
| это не exception а assert скорее всего дело в чтении файла, видимо после прочтения первой строки, читать становится нечего... |
| Автор: X-3R1 8.4.2009, 11:28 | ||||||||
| Не, данные из файла прочитались нормально, std::find же работает. Такая же фигня, когда пытаюсь данные из файла загнать вначале в std::stringstream Добавлено через 6 минут и 16 секунд
Не совсем так, для работы этого алгоритма пойдут любые итераторы, поиск же производится через разыменовывание и operator ==():
Да, проверка есть:
|
| Автор: mrbrooks 8.4.2009, 12:09 | ||
у меня не подошли любые итераторы. |
| Автор: Lazin 8.4.2009, 12:27 | ||
это как? данный код ищет в файле последовательность строк:
|
| Автор: mrbrooks 8.4.2009, 12:33 | ||
| Lazin, за этот код студия мне вломила в печень
хотя возможно - я что то не учел. |
| Автор: X-3R1 8.4.2009, 12:39 | ||||
угу, потому что вместо
надо
Нет в первой строке лишний пробел вкрался случайно |
| Автор: mrbrooks 8.4.2009, 12:43 | ||
| X-3R1, здесь опечатка произошла - копировал твой код и ничерта не исправил. По этому будет так:
Добавлено через 52 секунды Собственно за это и получил в печень. |
| Автор: Lazin 8.4.2009, 12:56 |
алгоритм возвращает std::istream_iterator<std::string> Добавлено через 2 минуты и 13 секунд попробовал это запустить у себя, получаю ту-же ошибку, хотя по идее все должно работать... |
| Автор: mrbrooks 8.4.2009, 13:05 |
я и это попробывал. 2008 студия шлет меня так же подальше. потому я говорил о промежуточном контейнере. |
| Автор: Lazin 8.4.2009, 13:15 |
тогда придется читать весь файл в память, для чего тогда вообще использовать итератор? странно то, что файл можно прочитать через итератор it, но внутри алгоритма файл читаться перестает выглядит это примерно так: в std: далее выполняется оператор ++ для копии итератора, который вызывает оператор >> т.е пытается прочитать след. значение из файла, и происходит ошибка, с mingw этот код работатет Добавлено через 45 секунд вместо std: |
| Автор: mrbrooks 8.4.2009, 13:34 | ||
а как же тогда я узнаю результат без итератора? к примеру как http://cplusplus.com/reference/algorithm/search/ Добавлено через 1 минуту и 20 секунд рожа смайла скрыла твою идею |