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

Создать шаблонный класс "Вектор"

26.12.2017, 16:50. Показов 7564. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Нужно создать шаблон вектор,чтоб был похож на вектор из стл.И клас студент какой вектор.
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <iostream>
#include <iomanip>
#include <string>
template <class T>
class Vector
{
protected: //?
    int size;
    int cap;
    T* data;
public:
    Vector(int=1);
    const int Size();
    const int capacity();
    T& operator [](int);
    void push_back(T);
    ~Vector(void);
};
template <class  T>
const int Vector<T>::Size()
{
    return size;
}
template <class  T>
const int Vector<T>::capacity()
{
   return cap;
}
template <class  T>
Vector<T>::Vector(int l)
{   int c;
    if(l<=0)l=1;
    size=l;
    cap=1;
    while(cap<size)cap=cap*2;
    data = new T[cap];
}
template <class  T>
void Vector<T>::push_back(T elem)
{
    T* newdata;
    if(size>cap) {
        cap=cap*2;
        newdata=new T[cap];
        for (int i=0; i<size; i++)
            newdata[i]=data[i];
        delete[] data;
        data=newdata;
    }
    data[size]=elem;
    size++;
}
 
 
template <class  T>
Vector<T>::~Vector(void)
{
    delete [] data;
}
 
template <class  T>
T& Vector<T>::operator[](int i)
{
    return data[i];
}
 
class Student {
 
private:
    string name;
    string surname;
public:
    Student(string name, string surname):name(name), surname(surname){};
    Student(const Student& student) :name(student.name), surname(student.surname){};
 
    Student& operator=(const Student& student) {
        name = student.name;
        surname = student.surname;
        return *this;
    }
 
    int CompareName(const Student& student) const {
        return name.compare(student.name);
    }
 
    int CompareSurname(const Student& student) const {
        return surname.compare(student.surname);
    }
 
    friend ostream& operator<< (ostream& stream, const Student& student) {
        stream << "   Name:" << setw(10) << student.name;
        stream << "   Surname:" << setw(10) << student.surname << endl;
        return stream;
    }
};
void Init(Vector<Student>& students);
void Print(const Vector<Student>& students);
int main()
{
Vector<Student> students;
 
    Init(students);
    cout << "list: :" << endl;
    Print(students);
    return 0;
}
void Init(Vector<Student>& students) {
    students.push_back(Student("Vasiliy", "C"));
    students.push_back(Student("Oleg", "B"));
    students.push_back(Student("Maxim", "L"));
    students.push_back(Student("Dmitriy", "K"));
    students.push_back(Student("Andrey", "Z"));
    students.push_back(Student("Vladislav", "A"));
}
 
void Print(const Vector<Student>& students) {
       for (const Student& student : students)
            cout << student;
}
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
||=== Build: Debug in laba4 (compiler: GNU GCC Compiler) ===|
C:\Users\lapsha\Documents\laba4\main.cpp|70|error: 'string' does not name a type|
C:\Users\lapsha\Documents\laba4\main.cpp|71|error: 'string' does not name a type|
C:\Users\lapsha\Documents\laba4\main.cpp|76|error: expected ')' before 'name'|
C:\Users\lapsha\Documents\laba4\main.cpp|93|error: 'ostream' does not name a type|
C:\Users\lapsha\Documents\laba4\main.cpp|77|error: class 'Student' does not have any field named 'name'|
C:\Users\lapsha\Documents\laba4\main.cpp|77|error: 'const class Student' has no member named 'name'|
C:\Users\lapsha\Documents\laba4\main.cpp|77|error: class 'Student' does not have any field named 'surname'|
C:\Users\lapsha\Documents\laba4\main.cpp|77|error: 'const class Student' has no member named 'surname'|
C:\Users\lapsha\Documents\laba4\main.cpp||In member function 'Student& Student::operator=(const Student&)':|
C:\Users\lapsha\Documents\laba4\main.cpp|80|error: 'name' was not declared in this scope|
C:\Users\lapsha\Documents\laba4\main.cpp|80|error: 'const class Student' has no member named 'name'|
C:\Users\lapsha\Documents\laba4\main.cpp|81|error: 'surname' was not declared in this scope|
C:\Users\lapsha\Documents\laba4\main.cpp|81|error: 'const class Student' has no member named 'surname'|
C:\Users\lapsha\Documents\laba4\main.cpp||In member function 'int Student::CompareName(const Student&) const':|
C:\Users\lapsha\Documents\laba4\main.cpp|86|error: 'name' was not declared in this scope|
C:\Users\lapsha\Documents\laba4\main.cpp|86|error: 'const class Student' has no member named 'name'|
C:\Users\lapsha\Documents\laba4\main.cpp||In member function 'int Student::CompareSurname(const Student&) const':|
C:\Users\lapsha\Documents\laba4\main.cpp|90|error: 'surname' was not declared in this scope|
C:\Users\lapsha\Documents\laba4\main.cpp|90|error: 'const class Student' has no member named 'surname'|
C:\Users\lapsha\Documents\laba4\main.cpp||In function 'int main()':|
C:\Users\lapsha\Documents\laba4\main.cpp|106|error: 'cout' was not declared in this scope|
C:\Users\lapsha\Documents\laba4\main.cpp|106|note: suggested alternative:|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\iostream|61|note:   'std::cout'|
C:\Users\lapsha\Documents\laba4\main.cpp|106|error: 'endl' was not declared in this scope|
C:\Users\lapsha\Documents\laba4\main.cpp|106|note: suggested alternative:|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\ostream|564|note:   'std::endl'|
C:\Users\lapsha\Documents\laba4\main.cpp||In function 'void Init(Vector<Student>&)':|
C:\Users\lapsha\Documents\laba4\main.cpp|111|error: no matching function for call to 'Student::Student(const char [8], const char [2])'|
C:\Users\lapsha\Documents\laba4\main.cpp|111|note: candidate is:|
C:\Users\lapsha\Documents\laba4\main.cpp|77|note: Student::Student(const Student&)|
C:\Users\lapsha\Documents\laba4\main.cpp|77|note:   candidate expects 1 argument, 2 provided|
C:\Users\lapsha\Documents\laba4\main.cpp|112|error: no matching function for call to 'Student::Student(const char [5], const char [2])'|
C:\Users\lapsha\Documents\laba4\main.cpp|112|note: candidate is:|
C:\Users\lapsha\Documents\laba4\main.cpp|77|note: Student::Student(const Student&)|
C:\Users\lapsha\Documents\laba4\main.cpp|77|note:   candidate expects 1 argument, 2 provided|
C:\Users\lapsha\Documents\laba4\main.cpp|113|error: no matching function for call to 'Student::Student(const char [6], const char [2])'|
C:\Users\lapsha\Documents\laba4\main.cpp|113|note: candidate is:|
C:\Users\lapsha\Documents\laba4\main.cpp|77|note: Student::Student(const Student&)|
C:\Users\lapsha\Documents\laba4\main.cpp|77|note:   candidate expects 1 argument, 2 provided|
C:\Users\lapsha\Documents\laba4\main.cpp|114|error: no matching function for call to 'Student::Student(const char [8], const char [2])'|
C:\Users\lapsha\Documents\laba4\main.cpp|114|note: candidate is:|
C:\Users\lapsha\Documents\laba4\main.cpp|77|note: Student::Student(const Student&)|
C:\Users\lapsha\Documents\laba4\main.cpp|77|note:   candidate expects 1 argument, 2 provided|
C:\Users\lapsha\Documents\laba4\main.cpp|115|error: no matching function for call to 'Student::Student(const char [7], const char [2])'|
C:\Users\lapsha\Documents\laba4\main.cpp|115|note: candidate is:|
C:\Users\lapsha\Documents\laba4\main.cpp|77|note: Student::Student(const Student&)|
C:\Users\lapsha\Documents\laba4\main.cpp|77|note:   candidate expects 1 argument, 2 provided|
C:\Users\lapsha\Documents\laba4\main.cpp|116|error: no matching function for call to 'Student::Student(const char [10], const char [2])'|
C:\Users\lapsha\Documents\laba4\main.cpp|116|note: candidate is:|
C:\Users\lapsha\Documents\laba4\main.cpp|77|note: Student::Student(const Student&)|
C:\Users\lapsha\Documents\laba4\main.cpp|77|note:   candidate expects 1 argument, 2 provided|
C:\Users\lapsha\Documents\laba4\main.cpp||In function 'void Print(const Vector<Student>&)':|
C:\Users\lapsha\Documents\laba4\main.cpp|120|error: 'begin' was not declared in this scope|
C:\Users\lapsha\Documents\laba4\main.cpp|120|note: suggested alternative:|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\initializer_list|89|note:   'std::begin'|
C:\Users\lapsha\Documents\laba4\main.cpp|120|error: 'end' was not declared in this scope|
C:\Users\lapsha\Documents\laba4\main.cpp|120|note: suggested alternative:|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\initializer_list|99|note:   'std::end'|
C:\Users\lapsha\Documents\laba4\main.cpp|121|error: 'cout' was not declared in this scope|
C:\Users\lapsha\Documents\laba4\main.cpp|121|note: suggested alternative:|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\iostream|61|note:   'std::cout'|
C:\Users\lapsha\Documents\laba4\main.cpp||In instantiation of 'Vector<T>::Vector(int) [with T = Student]':|
C:\Users\lapsha\Documents\laba4\main.cpp|103|required from here|
C:\Users\lapsha\Documents\laba4\main.cpp|36|error: no matching function for call to 'Student::Student()'|
C:\Users\lapsha\Documents\laba4\main.cpp|36|note: candidate is:|
C:\Users\lapsha\Documents\laba4\main.cpp|77|note: Student::Student(const Student&)|
C:\Users\lapsha\Documents\laba4\main.cpp|77|note:   candidate expects 1 argument, 0 provided|
C:\Users\lapsha\Documents\laba4\main.cpp|31|warning: unused variable 'c' [-Wunused-variable]|
||=== Build failed: 28 error(s), 3 warning(s) (0 minute(s), 1 second(s)) ===|
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.12.2017, 16:50
Ответы с готовыми решениями:

Шаблонный класс вектор
Пытаюсь создать шаблонный класс Вектор. Не получается переопределить operator=. Если длины векторов...

Класс "вектор" с конструкторами, позволяющими создать нулевой вектор и вектор с произвольным числом элементов
Привет! Задача следующая. Нужно реализовать класс &quot;вектор&quot; с конструкторами, которые позволяют...

Создать шаблонный класс «бинарное дерево»
Создать шаблон класса «бинарное дерево». Использовать его для сортировки целых чисел и строк,...

Создать шаблонный класс «бинарное дерево»
Создать шаблон класса «бинарное дерево». Использовать его для сортировки целых чисел и строк,...

7
7793 / 6560 / 2984
Регистрация: 14.04.2014
Сообщений: 28,672
26.12.2017, 16:55 2
C++
1
std::string
0
0 / 0 / 0
Регистрация: 04.05.2017
Сообщений: 60
26.12.2017, 17:18  [ТС] 3
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
template <class T>
class Vector
{
protected:
    int size;
    int cap;
    T* data;
public:
    Vector(int=1);
    const int Size();
    const int capacity();
    T& operator [](int);
    void push_back(T);
    ~Vector(void);
};
template <class  T>
const int Vector<T>::Size()
{
    return size;
}
template <class  T>
const int Vector<T>::capacity()
{
   return cap;
}
template <class  T>
Vector<T>::Vector(int l)
{   int c;
    if(l<=0)l=1;
    size=l;
    cap=1;
    while(cap<size)cap=cap*2;
    data = new T[cap];
}
template <class  T>
void Vector<T>::push_back(T elem)
{
    T* newdata;
    if(size>cap) {
        cap=cap*2;
        newdata=new T[cap];
        for (int i=0; i<size; i++)
            newdata[i]=data[i];
        delete[] data;
        data=newdata;
    }
    data[size]=elem;
    size++;
}
 
 
template <class  T>
Vector<T>::~Vector(void)
{
    delete [] data;
}
 
template <class  T>
T& Vector<T>::operator[](int i)
{
    return data[i];
}
 
class Student {
 
private:
    string name;
    string surname;
public:
    Student(string name, string surname):name(name), surname(surname){};
    Student(const Student& student) :name(student.name), surname(student.surname){};
 
    Student& operator=(const Student& student) {
        name = student.name;
        surname = student.surname;
        return *this;
    }
 
    int CompareName(const Student& student) const {
        return name.compare(student.name);
    }
 
    int CompareSurname(const Student& student) const {
        return surname.compare(student.surname);
    }
 
    friend ostream& operator<< (ostream& stream, const Student& student) {
        stream << "   Name:" << setw(10) << student.name;
        stream << "   Surname:" << setw(10) << student.surname << endl;
        return stream;
    }
};
void Init(Vector<Student>& students);
int main()
{
Vector<Student> students;
 
    Init(students);
    cout << "list: :" << endl;
    cout<<students;
    return 0;
}
void Init(Vector<Student>& students) {
    students.push_back(Student("Vasiliy", "C"));
    students.push_back(Student("Oleg", "B"));
    students.push_back(Student("Maxim", "L"));
    students.push_back(Student("Dmitriy", "K"));
    students.push_back(Student("Andrey", "Z"));
    students.push_back(Student("Vladislav", "A"));
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
||=== Build: Debug in laba4 (compiler: GNU GCC Compiler) ===|
C:\Users\lapsha\Documents\laba4\main.cpp||In function 'int main()':|
C:\Users\lapsha\Documents\laba4\main.cpp|104|error: cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'|
C:\Program Files (x86)\CodeBlocks\MinGW\lib\gcc\mingw32\4.9.2\include\c++\ostream|602|note: initializing argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = Vector<Student>]'|
C:\Users\lapsha\Documents\laba4\main.cpp||In instantiation of 'Vector<T>::Vector(int) [with T = Student]':|
C:\Users\lapsha\Documents\laba4\main.cpp|100|required from here|
C:\Users\lapsha\Documents\laba4\main.cpp|37|error: no matching function for call to 'Student::Student()'|
C:\Users\lapsha\Documents\laba4\main.cpp|37|note: candidates are:|
C:\Users\lapsha\Documents\laba4\main.cpp|75|note: Student::Student(const Student&)|
C:\Users\lapsha\Documents\laba4\main.cpp|75|note:   candidate expects 1 argument, 0 provided|
C:\Users\lapsha\Documents\laba4\main.cpp|74|note: Student::Student(std::string, std::string)|
C:\Users\lapsha\Documents\laba4\main.cpp|74|note:   candidate expects 2 arguments, 0 provided|
C:\Users\lapsha\Documents\laba4\main.cpp|32|warning: unused variable 'c' [-Wunused-variable]|
C:\Users\lapsha\Documents\laba4\main.cpp||In instantiation of 'void Vector<T>::push_back(T) [with T = Student]':|
C:\Users\lapsha\Documents\laba4\main.cpp|108|required from here|
C:\Users\lapsha\Documents\laba4\main.cpp|45|error: no matching function for call to 'Student::Student()'|
C:\Users\lapsha\Documents\laba4\main.cpp|45|note: candidates are:|
C:\Users\lapsha\Documents\laba4\main.cpp|75|note: Student::Student(const Student&)|
C:\Users\lapsha\Documents\laba4\main.cpp|75|note:   candidate expects 1 argument, 0 provided|
C:\Users\lapsha\Documents\laba4\main.cpp|74|note: Student::Student(std::string, std::string)|
C:\Users\lapsha\Documents\laba4\main.cpp|74|note:   candidate expects 2 arguments, 0 provided|
||=== Build failed: 3 error(s), 5 warning(s) (0 minute(s), 6 second(s)) ===|
0
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
26.12.2017, 17:48 4
Лучший ответ Сообщение было отмечено lapsha1337 как решение

Решение

1)
C++
1
2
3
4
5
6
7
8
9
int main()
{
    Vector<Student> students;
    Init(students);
    cout << "list: :" << endl;
    for(int i = 0; i < students.Size(); i++)
        cout << students[i] << endl;
    return 0;
}
2) не хватает конструктора без аргументов
C++
1
Student():name(), surname(){};
иначе создать массив не получится

А дальше дебажь сам. Скорее всего не работают строки
C++
1
2
        name = student.name;
        surname = student.surname;
Добавлено через 12 минут
и не работают они из-за того, что в Vector<T>::Vector(int l) задано size=1;, а также в Vector<T>::push_back задано if(size>cap)
0
0 / 0 / 0
Регистрация: 04.05.2017
Сообщений: 60
26.12.2017, 17:49  [ТС] 5
C++
1
cout << students[i] << endl;

C:\Users\lapsha\Documents\laba4\main.cpp|91|error: cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'|
0
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
26.12.2017, 17:55 6
И что у тебя за компилятор?

http://rextester.com/ORY12953
0
0 / 0 / 0
Регистрация: 04.05.2017
Сообщений: 60
26.12.2017, 17:59  [ТС] 7
gnu gcc
0
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
26.12.2017, 18:02 8
Попробуй
C++
1
friend ostream& operator<< (ostream&& stream, const Student& student)
0
26.12.2017, 18:02
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.12.2017, 18:02
Помогаю со студенческими работами здесь

Создать шаблонный класс - контейнер Array
Доброго время суток, нужна помощь в реализации следующего задания: Создать шаблонный класс -...

Создать строковый шаблонный класс String
Сделайте класс String шаблонным. В исходном классе замените конструктор с 1 параметром на...

Создать шаблонный класс - двумерный динамический массив
Задание:Создать шаблонный класс - двумерный динамический массив. Тип элементов массива определяется...

Выделение памяти. Создать шаблонный класс-матрица
Я считываю с файла значения от 1 до 1000000,а потом в методе &quot;copycolumn&quot; копирую одну колонку из...

Создать шаблонный класс и наследованный от этого класса метод
Создать шаблонный класс и наследованный от этого класса метод(естественно шаблонный), реализовать...

Создать динамический шаблонный класс односвязный список - List
помогите пожалуйста с задание в универ задали и я вот сижу парюсь! буду очень вам благодарен...

Создать шаблонный класс для сортировки массива по убыванию
Создать шаблонный класс для сортировки массива по убыванию. и вопрос в чем отличается шаблонный...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru