Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Progrmmer69
0 / 0 / 1
Регистрация: 01.12.2016
Сообщений: 19
1

Stepik.org Программирование на языке C++ Шаблоны функций

05.08.2017, 23:30. Просмотров 746. Ответов 2

Помогите пожалуйста, уже который день не могу сделать программу.

Шаблонный класс Array может хранить объекты любого типа, для которого определён конструктор копирования, в том числе и другой Array, например, Array< Array<int> >. Глубина вложенности может быть произвольной. Напишите шаблонную функцию (или несколько) flatten, которая принимает на вход такой "многомерный" Array неизвестной заранее глубины вложенности и выводит в поток out через пробел все элементы, хранящиеся на самом нижнем уровне. Примеры работы функции flatten:

C++
1
2
3
4
5
6
7
8
Array<int> ints(2, 0);
ints[0] = 10;
ints[1] = 20;
flatten(ints, std::cout); // выводит на экран строку "10 20"
Array< Array<int> > array_of_ints(2, ints);
flatten(array_of_ints, std::cout); // выводит на экран строку "10 20 10 20"
Array<double> doubles(10, 0.0);
flatten(doubles, std::cout); // работать должно не только для типа int
Note: лидирующие и завершающие пробельные символы будут игнорироваться проверяющей системой, т. е. там где ожидается "10 20" будет так же принят, например, вариант " 10 20 ", но не вывод "1020".

Hint: шаблонные функции тоже можно перегружать, из нескольких шаблонных функций будет выбрана наиболее специфичная.

Sample Input:
There are no tests for this task

Sample Output:
OK


Мой код:
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
#include <iostream>
#include <cstddef>
 
template <typename T>
class Array
{
 
public:
    explicit Array(size_t size = 0, const T& value = T()) : size_(size), data_(new T[size]) {
        for (size_t i = 0; i != size_; ++i){
            data_[i] = value;
        }
    }
    Array(const Array & obj) : size_(obj.size_), data_(new T[obj.size_]) {
        for (size_t i = 0; i != size_; ++i){
            data_[i] = obj.data_[i];
        }
    }
    Array& operator=(const Array & obj){
        if (this != &obj) {
            delete [] data_;
            size_ = obj.size_;
            data_ = new T[size_];
            for (size_t i = 0; i != size_; ++i) {
                data_[i] = obj.data_[i];
            }
        }
        return *this;
    }
 
    size_t size() const {
        return size_;
    }
    T& operator[](size_t i) {
        return data_[i];
    }
    const T& operator[](size_t i) const {
        return data_[i];
    }
    ~Array() {
        delete[] data_;
    }
 
private :
    size_t size_ ;
    T * data_ ;
};
 
template <typename Type>
void flatten(const Array<Type>& array, std::ostream& out)
{
    for (size_t i=0; i != array.size(); ++i){
        out << array[i] << " ";
    }
}
template <typename Type>
void flatten(const Array< Array<Type> >& array, std::ostream& out)
{
    for (size_t i=0; i != array.size(); ++i){
        flatten(array[i], out);
    }
}
Выдает такую ошибку:
Compilation error
main.cpp:68:7: error: redefinition of 'class Array<T>'
class Array
^
main.cpp:5:7: error: previous definition of 'class Array<T>'
class Array
^
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.08.2017, 23:30
Ответы с готовыми решениями:

Шаблоны функций 9 Step stepik.org Программирование на языке C++
Помогите пожалуйста, уже который день не могу сделать программу. Шаблонный класс Array может...

Программирование на языке C++ Шаблоны функций
Помогите пожалуйста В первом уроке вы реализовали простой шаблон ValueHolder, в этом задании мы...

Stepic.org. Программирование на С++. Многомерные массивы. Step 9. Задача
Помогите понять суть задачи. Т.е. на вход подается массив 1-я строка, которого содержит...

Перегрузка функций, шаблоны функций Функция определения объемов: шара по его радиусу
Перегрузка функций, шаблоны функций Функция определения объемов: шара по его радиусу (V=4/3пиR2),...

Программирование функций, Программирование процедур, рекурсивную подпрограммa
1 (Программирование функций) Вычислить площадь правильного шестиугольника со стороной a, используя...

2
DevAlone
324 / 276 / 78
Регистрация: 02.08.2016
Сообщений: 1,008
Завершенные тесты: 4
06.08.2017, 03:29 2
Возможно ты забыл про include guard
Скинь весь код(все файлы)
0
Progrmmer69
0 / 0 / 1
Регистрация: 01.12.2016
Сообщений: 19
06.08.2017, 21:34  [ТС] 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
/*
Шаблонный класс Array может хранить объекты любого типа,
для которого определён конструктор копирования,
в том числе и другой Array, например, Array< Array<int> >.
Глубина вложенности может быть произвольной.
Напишите шаблонную функцию (или несколько) flatten,
которая принимает на вход такой "многомерный" Array неизвестной заранее глубины вложенности
и выводит в поток out через пробел все элементы,
хранящиеся на самом нижнем уровне.
Примеры работы функции flatten:
Array<int> ints(2, 0);
ints[0] = 10;
ints[1] = 20;
flatten(ints, std::cout); // выводит на экран строку "10 20"
Array< Array<int> > array_of_ints(2, ints);
flatten(array_of_ints, std::cout); // выводит на экран строку "10 20 10 20"
Array<double> doubles(10, 0.0);
flatten(doubles, std::cout); // работать должно не только для типа int
Note: лидирующие и завершающие пробельные символы будут игнорироваться проверяющей системой,
т. е. там где ожидается "10 20" будет так же принят, например, вариант "   10 20   ", но не вывод "1020".
Hint: шаблонные функции тоже можно перегружать,
из нескольких шаблонных функций будет выбрана наиболее специфичная.
*/
#include <iostream>
#include <cstddef>
 
template <typename T>
class Array
{
 
public:
    explicit Array(size_t size = 0, const T& value = T()) : size_(size), data_(new T[size]) {
        for (size_t i = 0; i != size_; ++i){
            data_[i] = value;
        }
    }
    Array(const Array & obj) : size_(obj.size_), data_(new T[obj.size_]) {
        for (size_t i = 0; i != size_; ++i){
            data_[i] = obj.data_[i];
        }
    }
    Array& operator=(const Array & obj){
        if (this != &obj) {
            delete [] data_;
            size_ = obj.size_;
            data_ = new T[size_];
            for (size_t i = 0; i != size_; ++i) {
                data_[i] = obj.data_[i];
            }
        }
        return *this;
    }
 
    size_t size() const {
        return size_;
    }
    T& operator[](size_t i) {
        return data_[i];
    }
    const T& operator[](size_t i) const {
        return data_[i];
    }
    ~Array() {
        delete[] data_;
    }
 
private :
    size_t size_ ;
    T * data_ ;
};
 
template <typename Type>
void flatten(const Array<Type>& array, std::ostream& out)
{
    for (size_t i=0; i != array.size(); ++i){
        out << array[i] << " ";
    }
}
template <typename Type>
void flatten(const Array< Array<Type> >& array, std::ostream& out)
{
    for (size_t i=0; i != array.size(); ++i){
        flatten(array[i], out);
    }
}
 
int main(){
 
    Array<int> ints(2, 0);
    ints[0] = 10;
    ints[1] = 20;
    flatten(ints, std::cout); // выводит на экран строку "10 20"
    Array< Array<int> > array_of_ints(2, ints);
    flatten(array_of_ints, std::cout); // выводит на экран строку "10 20 10 20"
    Array<double> doubles(10, 0.0);
    flatten(doubles, std::cout);
 
    return 0;
}
вот весь, просто на stepik надо все одним сплошным кодом и без мейна

Добавлено через 10 часов 17 минут
Скинул выше

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.08.2017, 21:34

Шаблоны классов в языке с++.Нужна доступная информация.
Нужна информация о шаблонах классов в языке с++,что с чем едят,в доступной форме для...

Шаблоны функций
Путем перестановки элементов квадратной натуральной матрицы добиться того, чтобы ее максимальный...

Шаблоны функций
Задание. 1. Реализовать на языке С++ программу, в которой оформ-лены в виде шаблонов функций...


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

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

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