Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
6 / 6 / 0
Регистрация: 06.10.2010
Сообщений: 122
1

Проблема с итератором в <vector>

11.01.2012, 16:45. Показов 1194. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Помогите пожалуйста решить проблему: У меня существует класс
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Book
{
    string author,title,publishing;
    int year_p;
    double price;
public:
    Book(){author=title=publishing="";year_p=price=0;}
    Book(string a,string t,int y,string p,double pr)
    {
        author=a;
        title=t;
        year_p=y;
        publishing=p;
        price=pr;
    }
    ~Book(){};
    int delete_book();
    friend ostream& operator<<(ostream& out,Book ob);
    vector<Book>v;
};
полностью код писать не буду, только самое нужное. Так вот. У меня есть вектор v типа <Book>.
Мне в задании нужно произвести поиск. Вот что я делаю
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
int Book::delete_book()
{
    Book ob;
    string a,t,p,x;
    int y,i;
    double pr;
//далее нужно из файла считать данные и засунуть их в вектор
    fstream in("books.txt",ios::out | ios::in | ios::binary);
    while(!in.eof())
    {
        in>>a;
        in>>t;
        in>>y;
        in>>p;
        in>>pr;
        ob.v.push_back(Book(a,t,y,p,pr));
    }
    for(int i=0;i<ob.v.size();i++)
        cout<<ob.v[i];//вектор заполнен, все хорошо
    cout<<"\nВведите название книги: ";
    cin>>x;
    vector<Book>::iterator it;//создаю итератор для поиска
    it=find(ob.v.begin(),ob.v.end(),x);//тут ошибка! описание ниже
 
return 0;
}
возникает ошибка в файле algorythm:
"Ошибка 10 error C2678: бинарный "==": не найден оператор, принимающий левый операнд типа "Book" (или приемлемое преобразование отсутствует) c:\program files (x86)\microsoft visual studio 10.0\vc\include\algorithm 41
"
Подключены такие библиотеки
C++
1
2
3
4
5
6
7
#include<iostream>
#include<conio.h>
#include<fstream>
#include<vector>
#include<algorithm>
#include<iterator>
#include<string>
Компилятор VC 2010
В чем проблема, скажите пожалуйста!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.01.2012, 16:45
Ответы с готовыми решениями:

C++ | Проблема с итератором
У меня есть два класса - PhoneBook и Contact. PhoneBook содержит set&lt;Contact&gt;. Также есть метод ShowContacts() который выводит все...

Проблема с итератором
Добрый день! На днях столкнулся с трудностью. Есть текстовый файл с ионами. Моя функция должна перебрать этот файл и выбрать оттуда...

Проблема с итератором
Для тренировки по теме map решил создать подобие словаря, где ключ - английское слово, а значение - его перевод на русский. Так вот на...

9
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
11.01.2012, 17:00 2
не в вектора дело а тем более не в итераторе.
напишите оператор== для вашего класса, вам компиль же ясно даже русским языком об этом и написал
0
инженер-системотехник
 Аватар для Haster
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
11.01.2012, 17:00 3
pun4er, в твоем случае функция find перебирает элементы типа Book и пытается их сравнивать со строкой... Что не верно.
Как сказал OstapBender, нужно переопределить оператор == :

bool operator==(const Book&, const string&);
bool operator==(const string&, const Book&);
1
5 / 5 / 1
Регистрация: 19.09.2009
Сообщений: 23
11.01.2012, 17:09 4
Цитата Сообщение от Haster Посмотреть сообщение
pun4er, в твоем случае функция find перебирает элементы типа Book и пытается их сравнивать со строкой... Что не верно.
Соглассен.
Автору нужно написать геттер для получения поля title (название в классе) и сравнивать с ним.
для этого возможно не нужно будет перегружать оператор ==
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
11.01.2012, 17:10 5
Haster,
zkod,
скажите в каком месте Book сравнивается со "строкой"?
1
инженер-системотехник
 Аватар для Haster
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
11.01.2012, 17:16 6
OstapBender,
Цитата Сообщение от pun4er Посмотреть сообщение
it=find(ob.v.begin(),ob.v.end(),x);//тут ошибка! описание ниже
как я понимаю x - это строка
0
 Аватар для OstapBender
594 / 532 / 76
Регистрация: 22.03.2011
Сообщений: 1,585
11.01.2012, 18:49 7
Да.....
Там действительно лучше предикат.
0
5 / 5 / 1
Регистрация: 19.09.2009
Сообщений: 23
11.01.2012, 19:18 8
pun4er, а зачем вы в классе книга, создаёте контейнер книг?
0
инженер-системотехник
 Аватар для Haster
111 / 111 / 5
Регистрация: 10.03.2009
Сообщений: 533
11.01.2012, 19:39 9
zkod, думаю он хотел сделать класс "книги" (Books), но получилось что получилось )
0
5 / 5 / 1
Регистрация: 19.09.2009
Сообщений: 23
11.01.2012, 20:08 10
честно попробовал, посмотреть, что находится в контейнере после вызова delete_book()
сделал криво, но пытался сделать подобный класс, с подобными вызовами.
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
#include <iostream>
#include <string>
#include <vector>
#include <iterator>
 
class X
{
    std::string title;
 
public:
    std::vector<X>vx;
 
    X(const std::string &str = "1")
    {
        title = str;
    }
 
    int delete_X()
    {
        X ob;
 
        ob.vx.push_back((std::string)"123");
        ob.vx.push_back((std::string)"456");
 
        for(unsigned int i=0; i<ob.vx.size(); ++i)
        {
            std::cout << ob.vx.at(i) << std::endl;
        }
        //ob.display();
        return 0;
    }
 
    friend std::ostream& operator<<(std::ostream& out,X x)
    {
        return out << x.title;
    }
 
    std::string getTitle()
    {
        return title;
    }
 
    void display()
    {
        std::cout << vx.size() << std::endl;
        for(std::vector<X>::iterator it = vx.begin(); it != vx.end(); ++it)
        {
            std::cout << it->getTitle() << std::endl;
        }
    }
};
 
int main()
{
    X x;
    x.delete_X();
    x.display();
 
    system("pause");
    return 0;
}
с ним работать не получится)

pun4er, оставь в классе только поля с конструктором + добавь геттеры, а контейнер и всё остальное делай например в отдельном классе "Библиотека"
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.01.2012, 20:08
Помогаю со студенческими работами здесь

Проблема с <vector>
#include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;vector&gt; using namespace std; void smb_in(); int main() { ...

Проблема с vector
Здравствуйте! Есть класс BucketSort: #ifndef BUCKETSORT_H #define BUCKETSORT_H #include &lt;vector&gt; class BucketSort { ...

Проблема с vector
Объявляю булевый вектор vector&lt;bool&gt; used; затем заполняю его false'ами for (int i=0; i&lt;n; i++) used = false; выходит...

Проблема с vector<int*>
Добрый день всем! Появился вопрос: почему при выполнение следующего кода не все значения указателей внутри vector&lt;int*&gt;...

Проблема с деструктором и ошибка vector
Привет. У меня есть класс GUIManager. Я создал указатель на этот класс: GUIManager* guiManager = new GUIManager(аргументы); Перед...


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

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

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Winforstrap или красявый дизайн своими руками на HTML+JS+Winform­s
anomal6 04.03.2025
Сидел тут вечером ковырял проект на MAUI, и как же глупо создаются пакеты MSIX и система обновлений пакета публикации, но не об этом. Бывает нужен современный дизайн программы а писать на MAUI,. . .
Формат данных для симуляции физики, посредством распространённы­­­­­­­х не обученных моделей.
Hrethgir 04.03.2025
Что-то как-то снова потерялось, зато катангенсы закатангесились в одном сообщении. На днях писал, что планирую для работы апгрейдить (на этот раз удачно) девайс для работы (конкретно - здоровья для,. . .
Концепция variadic
CoderHuligan 04.03.2025
Мне не очень нравится (а кому это нравится?) что у нас есть отдельно компилятор, отдельно линковщик, причем со своим собственным командным языком. При этом усложнении надо знать помимо языка. . .
Java Record или Kotlin Data Class: что лучше для неизменяемых данных
Wired 04.03.2025
Java Record и Kotlin Data Class — два мощных инструмента для обуздания неизменяемых структур данных, каждый со своим уникальным подходом к решению этой задачи. История их появления весьма. . .
Создание производительны­­­х API с Java и gRPC
Wired 04.03.2025
В мире микросервисной разработки вопрос производительности часто становится краеугольным камнем. И хотя REST API давно завоевал сердца разработчиков своей простотой и интуитивностью, при высоких. . .
Что нового в JDK 24
Wired 04.03.2025
JDK 24 — это настоящий прорыв в эволюции Java, который кардинально меняет правила игры. В этом релизе разработчики Oracle наконец-то довели до ума множество критически важных улучшений в. . .
Разработка блокчейн с использованием Java: смарт-контракты и dApp
Wired 04.03.2025
Погружаясь в мир блокчейн-разработки на Java, разработчик получает доступ к внушительному арсеналу инструментов. В отличие от Solidity, который "заперт" в экосистеме Ethereum, Java предоставляет. . .
WebAssembly в Kubernetes
stackOverflow 03.03.2025
В современной экосистеме облачных технологий WebAssembly (Wasm) становится все более значимым компонентом, предлагая уникальный подход к выполнению кода в распределенных системах. Эта технология. . .
GitHub Actions или Jenkins: Выбираем CI/CD платформу
stackOverflow 03.03.2025
Непрерывная интеграция и развертывание (CI/ CD) изменили подход к разработке программного обеспечения, превратив его в бесшовный процесс от написания кода до развертывания в продакшн. GitHub Actions и. . .
Автоматизация тестирования Pull Request в Kubernetes: Интеграция с GitHub Actions и GKE
stackOverflow 03.03.2025
Масштабные проекты с использованием Kubernetes требуют надежной системы тестирования изменений перед их внедрением в продакшн-среду. Традиционный подход с ручной проверкой Pull Request не справляется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru