Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
7 / 7 / 4
Регистрация: 07.09.2012
Сообщений: 178

Класс и vector

15.04.2013, 23:19. Показов 1901. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
всем доброго времени суток,задача состоит в том что бы данные классов хранились в векторе,что я и пытался сделать.
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
#include <iostream>
#include <algorithm>
#include <vector>
 
 
using namespace std;
 
#define n 40
 
class book{
public:
    book(char name_of_book=NULL,char author=NULL,int numb_of_authors=0,int year=0,int numb_of_pages=0);
    //void input();
    //void show();
    ~book();
private:
    char my_name_of_book[n],my_author[n];
    int my_numb_of_authors,my_year,my_numb_of_pages;
};
 
 
book::book(char name_of_book,char author,int numb_of_authors,int year,int numb_of_pages)
{
my_name_of_book[n]=name_of_book;
my_author[n]=author;
my_numb_of_authors=numb_of_authors;
my_year=year;
my_numb_of_pages=numb_of_pages;
 
 
}
 
book ::~book(){
    cout<<"Деструктор\n";
}
 
int main(){
    setlocale(0,"");
    vector<book> books;
    books.push_back(book("NAme", "Vasilii", 2, 1991, 200));//Ошибка book::book: ни одна из 2 перегрузок не может преобразовать все типы аргументов
    books.push_back(book("Titans", "Artem", 1, 2010, 483));//Ошибка book::book: ни одна из 2 перегрузок не может преобразовать все типы аргументов
    sort(books.begin(), books.end());
    system("pause");
    return 0;
}
но вот почему не добавляет не пойму.
и как потом вывести на экран данные которые мы занесли в vector
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.04.2013, 23:19
Ответы с готовыми решениями:

Базовый класс Complex и производный класс Vector
Создайте базовый класс Complex (комплексное число) для реализации комплексных чисел в алгебраической форме и основных операций с ними:...

Класс Vector
Помогите молю. Нужно реализовать класс вектор как класс шаблон. Перегрузить операторы ввода- вывода, сложение (сумма векторов), умножение...

Класс содержащий vector
Вот я написал класс с использованием vector #include &lt;vector&gt; #include &lt;iostream&gt; using namespace std; class Vector { ...

15
 Аватар для abit
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,859
15.04.2013, 23:23
C++
1
books.push_back(book("NAme", "Vasilii", 2, 1991, 200));
это бред...
добавлять в контейнер vector надо объект класса book, а не конструктор непонятно над чем... сконструируйте объект сперва, а потом уже пихайте в vector
0
545 / 344 / 12
Регистрация: 05.11.2010
Сообщений: 1,076
Записей в блоге: 1
15.04.2013, 23:29
Это и есть конструирование объекта.
0
 Аватар для abit
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,859
15.04.2013, 23:40
вы видимо меня не поняли)

гляжу на ваше "конструирование"...

C++
1
book::book(char name_of_book,char author,int numb_of_authors,int year,int numb_of_pages)
что у нас идёт первым аргументом конструктора?
тип char - 1 байт... вторым- тип char 1 байт...
а зачем вы туда передаёте
"NAme", "Vasilii"
это в один байт не влезет...
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
15.04.2013, 23:42
Ошибка в том, что конструктор принимает тип char в качестве первого и второго параметра, а ты передаешь const char *, т.е. указатели на строки.
0
7 / 7 / 4
Регистрация: 07.09.2012
Сообщений: 178
15.04.2013, 23:45  [ТС]
разобрался,спасибо,но остался вопрос.
и как потом вывести на консоль данные которые мы занесли в vector
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
15.04.2013, 23:47
И еще push_back требует объект book в качестве параметра, а конструктор не возвращает объект book. Он вообще ничего не возвращает в принципе.
0
 Аватар для abit
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,859
15.04.2013, 23:51
Цитата Сообщение от palva Посмотреть сообщение
И еще push_back требует объект book в качестве параметра, а конструктор не возвращает объект book. Он вообще ничего не возвращает в принципе.
вы не правы

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <vector>
 
class A
{
    public:
       A() {std::cout<<"Constructor"<<std::endl;}
};
 
int main()
{
   std::vector<A> B; 
   B.push_back(A());
   std::cout<<B.size();
   return 0;
}
это работает и конструирует таки объект для для B
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
15.04.2013, 23:55
Да, вижу, что не прав.
0
7 / 7 / 4
Регистрация: 07.09.2012
Сообщений: 178
16.04.2013, 00:08  [ТС]
повторюсь как на консоль вывести информацию которую мы занесли в обьект вектора
потому что
C++
1
2
3
4
5
6
char book::show()
{
    return my_name_of_book[n];
}
for (int i = 0; i < (int)books.size(); i++) 
        cerr << books[i].show() << endl;
нормального нечего не выводит.
0
 Аватар для abit
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,859
16.04.2013, 00:24
Vlad_,
тут вообще какая-то чепуха у вас написана

C++
1
2
3
4
char book::show()
{
    return my_name_of_book[n];
}
это некая функция, из класса book не принимающая аргументов...

и далее не с того не сего вдруг продолжение
C++
1
2
for (int i = 0; i < (int)books.size(); i++) 
        cerr << books[i].show() << endl;
та функция закрыта.... к чему это вообще относится

насчёт основного вопроса - вектор всё же контейнер произвольного доступа, поэтому там сходу можно два варианта обхода реализовать - через индекс и через итератор
0
7 / 7 / 4
Регистрация: 07.09.2012
Сообщений: 178
16.04.2013, 01:43  [ТС]
через #include <iterator>
C++
1
copy(books.begin(), books.end(), ostream_iterator<book>(cout, "\n"));
Ошибка 1 error C2679: бинарный <<: не найден оператор, принимающий правый операнд типа "book" (или приемлемое преобразование отсутствует)

Добавлено через 38 минут
опять таки хожу по кругу.
добавил
C++
1
2
3
4
5
char getAuthor()const {return my_author[n];}
    friend ostream &operator<<(ostream &stream, const book &book_obj) {
        stream << book_obj.getAuthor() << ", "; 
        return stream;
    }
и
C++
1
2
ostream_iterator<book> out_it (cout,", ");
    copy ( books.begin(), books.end(), out_it );
в итоге опять выводит не понятно что
0
 Аватар для abit
870 / 529 / 149
Регистрация: 03.02.2013
Сообщений: 1,859
16.04.2013, 02:06
Vlad_,
через #include <iterator>
C++
1
copy(books.begin(), books.end(), ostream_iterator<book>(cout, "\n"));
я так не помню, но поступил бы так -
C++
1
2
   for(std::vector<book>::const_iterator it=books.begin(); it!=books.end(); ++it)
        std::cout<<(*it)<<std::endl;
тут понятно что для book должен быть перегружен оперетор << на ostream& или вместо (*it) определить it->showmethod в классе book
а ещё лучше начать с нуля и заменить std::cout на ostream )
0
7 / 7 / 4
Регистрация: 07.09.2012
Сообщений: 178
16.04.2013, 02:09  [ТС]
разобрался,скажу это жесть вот готовый код,который работает,может кому-то понадобиться,можете сравнить с оригиналом и понять что нужно было делать)
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
#include <iostream>
#include <vector>
#include <iterator>
 
using namespace std;
 
#define n 40
 
class book{
public:
    book(char* name_of_book="",char* author="",int numb_of_authors=0,int year=0,int numb_of_pages=0);
    friend ostream &operator<<(ostream &stream, const book &book_obj) {
        stream << book_obj.my_name_of_book << ", "<<book_obj.my_author<< ", "<<book_obj.my_numb_of_authors<< ", "<<book_obj.my_year<< ", "<<book_obj.my_numb_of_pages<<endl ; 
        return stream;
    }
    ~book();
private:
    char* my_name_of_book;
    char* my_author;
    int my_numb_of_authors,my_year,my_numb_of_pages;
};
 
 
 
book::book(char* name_of_book,char* author,int numb_of_authors,int year,int numb_of_pages)
{
    my_name_of_book=name_of_book;
    my_author=author;
    my_numb_of_authors=numb_of_authors;
    my_year=year;
    my_numb_of_pages=numb_of_pages;
}
 
book ::~book(){
    //cout<<"Деструктор\n";
}
 
int main(){
    setlocale(0,"");
    vector<book> books;
    books.push_back(book("NAme", "Vasilii", 2, 1991, 200));
    books.push_back(book("Titans", "Artem", 1, 2010, 483));
    books.push_back(book("Voina i Mir", "Lev", 1, 1910, 1423));
    cout << "Сoдержимое вектора :\n" ;
    ostream_iterator<book> out_it (cout,"");
    copy ( books.begin(), books.end(), out_it );
    cout<<endl;
    system("pause");
    return 0;
}
0
 Аватар для palva
4278 / 2970 / 693
Регистрация: 08.06.2007
Сообщений: 9,930
Записей в блоге: 5
16.04.2013, 07:39
C++
1
2
3
4
char * book::show()
{
    return my_name_of_book;
}
0
7 / 7 / 4
Регистрация: 07.09.2012
Сообщений: 178
16.04.2013, 16:42  [ТС]
вот реализация ручного ввода,и количество книг по желанию пользователя
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
#include <iostream>
#include <vector>
#include <iterator>
 
using namespace std;
 
#define razm 40
 
class book{
public:
    book(){char* name_of_book="";char* author="";int numb_of_authors=0;int year=0;int numb_of_pages=0;};
    friend ostream &operator<<(ostream &stream, const book &book_obj) {
        stream << book_obj.my_name_of_book << ", "<<book_obj.my_author<< ", "<<book_obj.my_numb_of_authors<< ", "<<book_obj.my_year<< ", "<<book_obj.my_numb_of_pages<<endl ; 
        return stream;
    }
    ~book();
    friend book input();
    friend void show_books(vector<book> &books);
private:
    char my_name_of_book[razm];
    char my_author[razm];
    int my_numb_of_authors,my_year,my_numb_of_pages;
};
 
 
book input()
{
book tmp;
cout<<"Имя книги ";
cin>>tmp.my_name_of_book;
cout<<"Автор ";
cin>>tmp.my_author;
cout<<"Количество авторов ";
cin>>tmp.my_numb_of_authors;
cout<<"Год издания ";
cin>>tmp.my_year;
cout<<"Количество страниц в книге ";
cin>>tmp.my_numb_of_pages;
return tmp;
}
 
void show_books(vector<book> &s_books)
{
if (s_books.empty())
{
    cout<<"Нет книг!!!"; return;
}
cout<<"Каталог книг"<<endl;
    ostream_iterator<book> out_it(cout,"");
    copy(s_books.begin(),s_books.end(),out_it);
    
}
 
book ::~book(){
    //cout<<"Деструктор\n";
}
 
int main(){
    setlocale(0,"");
    vector<book> books;
    int n;
    cout<<"Введи количество книг\n";
    cin>>n;
    for (int i=0;i<n;i++){
    books.push_back(input());
    }
    cout << "\nСoдержимое вектора :\n" ;
    show_books(books);
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.04.2013, 16:42
Помогаю со студенческими работами здесь

Задания на класс vector
Помогите, пожалуйста, с задачей. Нужно добавить в вектор нечетные целые числа от -3 до 3. Удалить последнее число. Распечатать числа из...

Класс Vector и оператор new
Есть класс CItem Есть тип: typedef std::vector &lt;CItem&gt; ItemVector; typedef std::vector &lt;CItem&gt;::iterator Iter;Есть вектор и итератор:...

Шаблонный класс vector
Всем привет. Помогите создать шаблонный класс vector и массив который хранит значения template&lt;typename T, size_t size&gt; class...

Создать класс Vector 2D
Создать класс Vector для работы с векторами на плоскости, содержащий следующие члены класса: 1. Поля: • int х, у; 2. ...

vector (шаблонный класс)
Нужно создать простенький шаблонный класс вектор Подскажите пожалуйста , как написать запись элемента в начало вектора и в конец...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
[В процессе разработки] SDL3 для Web (WebAssembly): Сборка библиотек SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия SDL 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual. . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru