Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36
#1

deque iterator not dereferencable - C++

07.04.2013, 12:02. Просмотров 1990. Ответов 15
Метки нет (Все метки)

итак
программа должна считывать из файла данные об автобусных маршрутах (имя водителя, номер маршрута и т.д.). После этого сортировать сложной сортировкой (сначала по №автобуса и затем по №маршрута). Затем удалить из контейнера указанного водителя (прописные и строчные буквы в именах не различать).
у меня написан функциональный объект для того, что сравнивать элементы дека с введенной фамилией. Ошибок на этапе компиляции нет, сортирует нормально, но после ввода фамилии выскакивает такая ошибка: "deque iterator not dereferencable"
Версия программы не оконательная, т.е. тут ничегоне удаляется, потому как на этапе проверки, то ли нашел find_if выскакивает вот эта ошибка

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#include <iostream>
#include <fstream>
#include <deque>
#include <algorithm>
#include <functional>
#include <string>
#include <time.h>
using namespace std;
string ToLower (const string & a){
    string temp(a);
    for (int i=0;i<temp.length();i++)
    {
        if (temp[i]>='A' && temp[i]<='Z')
            temp[i]=tolower(temp[i]);
        else 
            if (temp[i]>='А' && temp[i]<='Я')
                temp[i]=_tolower(temp[i]);
    }
    return temp;
}
bool comp(const string & a, const string & b){
    return (ToLower(a)<ToLower(b));
}
struct way{
    int marsh;
    string Name;
    int aut;
    string Mark;
    friend ostream & operator <<(ostream & out,way & a)
    {
        out<<a.marsh<<" "<<a.Name<<" "<<a.aut<<" "<<a.Mark<<" ";
        return out;}
    bool operator ==(way &a )
    {
        return (ToLower(Name)==ToLower(a.Name));}
};
class pred{
    string s;
public:
    pred (const string & s):s(s){};
    bool operator () (const way & a){return (ToLower(a.Name)==ToLower(s));}
};
bool waycmp(const way & a, const way & b)
{
    if (a.aut<b.aut) return true;
    if (a.aut==b.aut)
        if (a.marsh<b.marsh)
            return true;
    return false;
}
int main ()
{
    setlocale (LC_ALL,".1251");
    ifstream in("input.txt");
    if (!in)
    {
        cout<<"Файл не найден"<<endl;
        in.close();
        return 0;}
    int n;
    in>>n;
    if (n<=0)
    {
        cout<<"Неверные данные в файле"<<endl;
        in.close();
        return 0;}
    deque<way> d(n);
    for (int i=0;i<n;i++)
    {
        in>>d[i].marsh>>d[i].Name>>d[i].aut>>d[i].Mark;}
    for (int i=0;i<n;i++)
        cout<<d[i]<<endl;
    cout<<endl;
    sort(d.begin(),d.end(),waycmp);
    cout<<"**********************************"<<endl;
    for (int i=0;i<n;i++)
        cout<<d[i]<<endl;
    cout<<endl;
    cout<<"Введите фамилию водитела, которого хотите удалить"<<endl;
    string name;
    cin>>name;
    deque<way>::iterator i;
    i=find_if(d.begin(),d.end(),pred(name));
    cout<<*i<<endl;
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.04.2013, 12:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос deque iterator not dereferencable (C++):

map/set iterator not dereferencable - C++
map&lt;string,int&gt; optimized(map&lt;string,int&gt;&amp;dict){ map&lt;string,int&gt;::iterator i=dict.begin(); map&lt;string,int&gt;::iterator j=dict.begin(); ...

Map/set iterator not dereferencable - C++
Есть два класса, первый: class AnimationManager { public: String currentAim; std::map&lt;String, Animation&gt; animList; ...

Map/set iterator not dereferencable - C++
Всем доброго времени суток. Суть задания в том, чтобы удалить повторы комбинаций чисел в multimap'e. Проблема в том, что появляется данная...

Map/set!( iterator not dereferencable) - C++
Есть функция,в которой происходит поиск в map по ключу. Если по данному ключу нет значения, то необходимо провести интерполяцию двух...

Ошибка list iterator not dereferencable - C++
Ошибка при использовании итератора. Хэлп, сос :cry: void client_login(list&lt;client&gt; client_list) { char name, login, password,...

Ошибка "iterator not dereferencable" при использовании ссылки - C++
Всем привет. Без ссылки все работает, с ссылкой ошибка: &quot;iterator not dereferencable&quot;. С ссылкой: void func(vector&lt;string&gt;&amp; arr) ...

15
iifat
2280 / 1435 / 114
Регистрация: 05.06.2011
Сообщений: 3,959
07.04.2013, 12:25 #2
input.txt-то приложи
0
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36
07.04.2013, 12:26  [ТС] #3
12
100 Новицкий 21 Маз
100 Лихач 22 Ман
123 Леонович 23 Камаз
101 Новицкий 21 Маз
101 Лихач 22 Ман
123 Леонович 23 Камаз
102 новицкий 21 маз
100 Иванов 22 Ман
123 Сидоров 23 Камаз
103 Новицкий 21 Маз
101 лихач 22 ман
123 Петров 23 Камаз
0
iifat
2280 / 1435 / 114
Регистрация: 05.06.2011
Сообщений: 3,959
07.04.2013, 13:50 #4
Хм. Скомпилил. gcc (Gentoo 4.5.3-r2 p1.1, pie-0.4.7) 4.5.3. Вот протокол.

100 Новицкий 21 Маз
100 Лихач 22 Ман
123 Леонович 23 Камаз
101 Новицкий 21 Маз
101 Лихач 22 Ман
123 Леонович 23 Камаз
102 новицкий 21 маз
100 Иванов 22 Ман
123 Сидоров 23 Камаз
103 Новицкий 21 Маз
101 лихач 22 ман
123 Петров 23 Камаз

**********************************
100 Новицкий 21 Маз
101 Новицкий 21 Маз
102 новицкий 21 маз
103 Новицкий 21 Маз
100 Лихач 22 Ман
100 Иванов 22 Ман
101 Лихач 22 Ман
101 лихач 22 ман
123 Леонович 23 Камаз
123 Леонович 23 Камаз
123 Сидоров 23 Камаз
123 Петров 23 Камаз

Введите фамилию водитела, которого хотите удалить
лихач
101 лихач 22 ман

Может, не то, чего ты хотел, но и ошибок никаких. А ты какую фамилию вводил?
1
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
07.04.2013, 13:53 #5
Цитата Сообщение от mazukta26 Посмотреть сообщение
C++
1
2
i=find_if(d.begin(),d.end(),pred(name));
cout<<*i<<endl;
find_if может вернуть d.end(), поэтому надо что-нибудь вроде
C++
1
2
3
4
5
6
i = find_if(d.begin(), d.end(), pred(name));
if (i != d.end()) {
   cout << *i << endl;
} else {
   cout << "Не найдено" << endl;
}
1
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36
07.04.2013, 13:59  [ТС] #6
хм
у меня ошибка не исчезает
точнее, если учесть возможность возврата d.end(), то ошибки нет
но и не выводит ничего, стало быть, ничего и не находит

Добавлено через 1 минуту
но не может же быть, что в visual studio не находит ничего,а в gcc находит
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
07.04.2013, 14:02 #7
mazukta26, возможно tolower не понимает русский.
1
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36
07.04.2013, 14:06  [ТС] #8
tolower не понимает, а вот _tolower понимает)
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
07.04.2013, 14:08 #9
Цитата Сообщение от mazukta26 Посмотреть сообщение
C++
1
if (temp[i]>='А' && temp[i]<='Я')
Так вроде только с латинецей можно, возможно в этом проблема.
1
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36
07.04.2013, 14:09  [ТС] #10
опять же, должно работать, тут ведь сравнение по коду + в других программах работает)
0
gray_fox
What a waste!
1521 / 1226 / 70
Регистрация: 21.04.2012
Сообщений: 2,565
Завершенные тесты: 3
07.04.2013, 14:14 #11
Вообщем, что то там внутри предиката не так, раз find_if так себя ведёт.

Добавлено через 4 минуты
Цитата Сообщение от mazukta26 Посмотреть сообщение
опять же, должно работать
Русские символы не обязаны идти по порядку в кодировке.
0
iifat
2280 / 1435 / 114
Регистрация: 05.06.2011
Сообщений: 3,959
07.04.2013, 14:32 #12
Кстати, да, я-то в Линуксе запускал, доже не скажу навскидку, что там за кодировка.
0
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36
07.04.2013, 16:04  [ТС] #13
они действительно идут по порядку за исключением буквы Ё
0
iifat
2280 / 1435 / 114
Регистрация: 05.06.2011
Сообщений: 3,959
07.04.2013, 19:26 #14
Кстати! В Винде ж две кодировки! Одна в графике, другая -- в текстовой сессии. Вполне возможно, у тебя фамилия корёжится.
Попробуй записать фамилию в текстовый файл и программу запустить примерно так:
Bash
1
test < fam.txt
Если сработает, значит, дело в этом.
0
mazukta26
1 / 1 / 0
Регистрация: 25.02.2013
Сообщений: 36
07.04.2013, 21:47  [ТС] #15
я не очень понимаю, что нужно сделать Т_Т
0
07.04.2013, 21:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.04.2013, 21:47
Привет! Вот еще темы с ответами:

std::sort(iterator, iterator, method) подскажите как исправить - C++
Уважаемые Знатоки!!! Вашему вниманию предоставляю код: #include &quot;stdafx.h&quot; #include &lt;vector&gt; #include &lt;algorithm&gt; class...

STL deque - C++
Устройство, основные операции и их стоимость, особенности использования deque. Ни где не могу найти стоимость выполнения основных...

Контейнер deque - C++
Задание:(используя контейнер deque) ввести последовательность натуральных чисел,у конце которой 0.Не сохраняя всей последовательности в...

std::deque - C++
Как известно при добавлении в конец вектора элементов(и не только в конец) может возникнуть перераспределение памяти что переместит данные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru