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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 3, средняя оценка - 5.00
zss
Модератор
Эксперт С++
6634 / 6196 / 2051
Регистрация: 18.12.2011
Сообщений: 16,155
Завершенные тесты: 1
#1

Образцы (шаблоны) программ для типовых задач - C++

10.03.2015, 11:35. Просмотров 53542. Ответов 19
Метки нет (Все метки)

Постим сюда образцы программ для решения типовых задач.

Образцы не должны быть истиной в последней инстанции,
а только иллюстрацией (идеей) оформления решения.

Содержание
1. Образец для обработки матриц (двумерных динамических массивов)

2. Образец для одномерного массива (вектора)

3. Образец для создания классов (базовый, производный, виртуальная функция)

4. Базовый класс для любого конечного автомата.

5. Велосипедный стек на односвязном списке

6. Вычисление значения кусочно заданной функции

7a. Функция с переменным числом параметров
7b. Вычисление суммы чисел функцией с переменным числом аргументов при помощи variadic templates (c++11)
7с. Функция с переменным числом параметров использующая std::initializer_list
13
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2015, 11:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Образцы (шаблоны) программ для типовых задач (C++):

Программирование типовых числовых задач обработки одномерных массивов - C++
1) Вычислить и запомнить в структуре одномерного массива (таблица 1) фиксированное количество элементов числовой последовательности,...

Алгоритм генерации типовых задач по теме "Многочлены" - C++
Помогите с алгоритмом) никак не могу написать алгоритм генерации((( Например, деление многочленов

Решение задач (создание программ) на С/С++ за плату - C++
Господа, нужно помощь. Необходимо выполнить несколько лабораторных работ на языке C, в Microsoft Visual Studio 2008. Задачки в целом...

Подскажите сайт, на котором куча задач по написанию программ - C++
нужен сайт, на котором куча задач по написанию программ(на паскальке или c++... - не важно) раньше попадался такой, сейчас найти не могу...

«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». - C++
«Шаблоны шаблонов» vs «шаблоны с параметрами-шаблонами». Есть ли разница в этих понятиях? Если есть, то в чём? И где (в каких...

Шаблоны. Плохо понимаемые моменты из книги "Шаблоны С++. Справочник разработчика". (Вандевурд, Джосаттис) - C++
Так как изучаю эту книгу, то в некоторых местах возникают вопросы. Чтобы не плодить много тем, корни у которых одни, решил создать эту...

19
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
07.12.2015, 12:08 #16
Пример вычисления суммы чисел функцией с переменным числом аргументов при помощи variadic templates (c++11):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
// терминальная функция
double sum() { return 0; }
 
// функция с переменным числом аргументов
template <typename... R> 
double sum(double init, R... rest) {
    return init + sum(rest...);
}
 
int main() {
    // кол-во аргументов может быть любым 
    std::cout << sum(1, 2.1, 3, -1.5) << std::endl;
}
1
Tulosba
:)
Эксперт С++
4397 / 3233 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
08.12.2015, 12:37 #17
Хотелось бы добавить, что для гомогенных аргументов не следует прибегать к variadic templates, а лучше использовать std::initializer_list:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <initializer_list>
#include <iostream>
 
double sum(std::initializer_list<double> lst) {
    double res = 0; // лучше использовать std::accumulate
    for(double el : lst) {
        res += el;
    }
    return res;
}
 
int main() {
    std::cout << sum({1, 2.1, 3, -1.5}) << std::endl;
}
4
Avazart
Эксперт С++
7433 / 5472 / 310
Регистрация: 10.12.2010
Сообщений: 24,383
Записей в блоге: 17
31.01.2016, 14:01 #18
Cra3y, И assert вместо исключений.
1
Nikitko_Cent
144 / 114 / 12
Регистрация: 27.10.2011
Сообщений: 687
Завершенные тесты: 3
09.03.2016, 03:14 #19
Одно из применений идиомы CRTP : статический полиморфизм (не путать с параметрическим) a.k.a "динамический полиморфизм без виртуальных методов"
Ещё одна плюшка - организация поведения статических методов по типу виртуальных.

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
#include <iostream>
 
template <typename T>
class BinaryOperationBase
{
public:
    static double run(double left, double right)
    {
        return T::run(left, right);
    }
 
    void saveResult(double left, double right)
    {
        static_cast<T *>(this)->saveResult(left, right);
    }
 
    double getResult()
    {
        return static_cast<T *>(this)->getResult();
    }
};
 
class DoubleMult : public BinaryOperationBase<DoubleMult>
{
private:
    double result;
public:
    static double run(double left, double right)
    {
        return left * right;
    }
 
    void saveResult(double left, double right)
    {
        result = left * right;
    }
 
    double getResult()
    {
        return result;
    }
};
 
class DoubleSub : public BinaryOperationBase<DoubleSub>
{
private:
    double result;
public:
    static double run(double left, double right)
    {
        return left - right;
    }
 
    void saveResult(double left, double right)
    {
        result = left - right;
    }
 
    double getResult()
    {
        return result;
    }
};
 
int main()
{
    BinaryOperationBase<DoubleMult> *mult = new DoubleMult();
    BinaryOperationBase<DoubleSub> *sub = new DoubleSub();
 
    std::cout << BinaryOperationBase<DoubleMult>::run(20.5, 10.0) << '\n';  
    std::cout << BinaryOperationBase<DoubleSub>::run(20.5, 10.0) << "\n\n"; 
 
    mult->saveResult(-120.3, -3.3);
    sub->saveResult(-120.3, -3.3);
    std::cout << mult->getResult() << ' ' << sub->getResult() << "\n\n";
 
    return 0;
}
В примере рассмотрена реализация и статических и обычных методов классов, используя CRTP
0
obivan
Падаван С++
417 / 237 / 60
Регистрация: 11.11.2014
Сообщений: 840
Завершенные тесты: 2
01.05.2016, 20:23 #20
Пример вычисления последовательности Фибоначи на шаблонах
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
#include <iostream>
 
namespace Constants {
    const size_t FibSize = 32;
}
 
template<int t> struct Elem {
    static const size_t value = Elem<t - 1>::value + Elem<t - 2>::value;
};
template<> struct Elem<0> {
    static const size_t value = 0;
};
template<> struct Elem<1> {
    static const size_t value = 1;
};
template<int r, int t> struct Table : Table<r + 1, t - 1> {
    Table() { values[t] = Elem<t>::value; }
};
template<int r> struct Table<r, 0> {
    size_t values[r + 1];
    Table() { values[0] = Elem<0>::value; }
    const size_t& operator[](int i) const { return values[i]; }
};
 
typedef Table<0, Constants::FibSize> Fibonachi;
 
int main(int argc, char *argv[]) {
    Fibonachi fArray;
 
    for (size_t i(0); i < Constants::FibSize; ++i)
        std::cout << fArray[i] << std::endl;
 
    std::cin.ignore();
    return 0;
}
1
01.05.2016, 20:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.05.2016, 20:23
Привет! Вот еще темы с ответами:

Помогите писать на С++ через шаблоны. Консуле я писал, но надо писать исползуя шаблоны - C++
В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1) количество элементов массива, равных 0; 2) сумму элементов...

Шаблоны функции для типов char - C++
покажите пожалуйста пример обработки строки с помощью шаблонов функций. например пусть будет подсчитать количество символов в строке. ...

Для чего необходимы шаблоны классов - C++
Зачем нужны шаблоны классов и для чего в данном коде для шаблона прописывается int? // class_templates.cpp template &lt;class T, int i&gt;...

Функции-шаблоны для обработки массива - C++
Разработать шаблон ввода и вывода массива, а так же шаблон для решение задачи : Все элементы заданного числа увеличить в два раза. ...


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

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

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