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

Объясните часть кода программы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Первый элемент массива 1 умножить на все элементы массива 2 и вывести результат http://www.cyberforum.ru/cpp-beginners/thread746394.html
Добрый день. Прошу помочь решить вот такую вот задачку: "есть два массива, в которых границы задает пользователь. Например, один массив {3, 13, 23, 33 .....n} другой {9, 19, 29 ....m} причем шаг...
C++ упорядочить слова в четных строках в порядке убывания в них гласных Доброго времени суток !Помогите пожалуйста советом:cry:Не могу реализовать функцию обработки в программе.Очень нужна ваша помощь! .Вот суть задания: вводим число строк, вводим строки, обрабатываем... http://www.cyberforum.ru/cpp-beginners/thread746380.html
C++ Тело падает под действием силы тяжести
Тело падает под действием силы тяжести с нулевой начальной скорости. Движение описывается следующей системой дифференциальных уравнени Система: (как скобочку сделать не знаю) dx/dt=V dV/dt=g/1+k
C++ Построить фигуру, которая состоит из трех концентрических колец разного цвета. Фигура движется по кругу по часовой стрелке
Построить фигуру, которая состоит из трех концентрических колец разного цвета. Фигура движется по кругу по часовой стрелке
C++ Поменять местами максимальный и минимальный элемент матрицы http://www.cyberforum.ru/cpp-beginners/thread746351.html
Здравствуйте. Задача вроде бы простая, но у меня возникло затруднение. Искал подобные, но свою ошибку увидеть не могу в упор. Суть задачи: дана матрица n на m. Поменять местами максимальный и...
C++ база данных Собственно, хочу написать программу с базой данных. Самое главное, хочу разобраться в совместном использовании классов, списков и разделения в файлах. Например, возьмем базу данных студентов. ... подробнее

Показать сообщение отдельно
Elfenlide
23 / 23 / 1
Регистрация: 15.04.2012
Сообщений: 183

Объясните часть кода программы - C++

26.12.2012, 03:00. Просмотров 294. Ответов 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
115
116
117
118
119
120
121
122
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
 
using namespace std;
 
template<class T>
void merge(T *a, int sizei, int sizej);
 
template<class T>
void InPlaceMergesort(T *a, int len);
 
template<class T>
void InPlaceMergesort(T *a, int len) {
   int listsize, xsize;
 
    for (listsize = 1; listsize <= len; listsize*=2) {
        for (int i = 0, j = listsize; (j+listsize) <= len; i += (listsize*2), j += (listsize*2)) {
            merge(&a[i], listsize, listsize);
        }
    }
 
    listsize /= 2;
 
    xsize = len % listsize;
    if (xsize > 1)
        InPlaceMergesort(&a[len-xsize], xsize);
    merge(a, listsize, xsize);
}
 
template<class T>
void merge(T *a, int sizei, int sizej) {
    T temp;
    int ii = 0;
    int ji = sizei;
    int flength = sizei+sizej;
 
    for (int f = 0; f < (flength-1); f++) {
        if (sizei == 0 || sizej == 0)
            break;
 
        if (a[ii] < a[ji]) {
            ii++;
            sizei--;
        }
        else {
            temp = a[ji];
 
            for (int z = (ji-1); z >= ii; z--)
                a[z+1] = a[z];  
            ii++;
 
            a[f] = temp;
 
            ji++;
            sizej--;
        }
    }
}
 
 
template<typename Iterator>
void in_place_mergesort(Iterator const first, Iterator const last) {
   InPlaceMergesort(&*first, static_cast<int>(std::distance(first, last)));
}
 
template<typename Container>
void in_place_mergesort(Container & container) {
   in_place_mergesort(container.begin(), container.end());
}
 
template<typename Value, int N>
void in_place_mergesort(Value (&array)[N]) {
   InPlaceMergesort(&array[0], N);
}
 
 
int main()
{
   const int kol = 8;
cout << "In-place merge sort: " << endl;
    cout << "char mas[] sort:" << endl;
    char mas3[kol];
    mas3[0] = 'x'; mas3[1] = 't'; mas3[2] = 'p'; mas3[3] = 'i'; mas3[4] = 'v'; mas3[5] = 'm'; mas3[6] = 'f'; mas3[7] = 'e';
    char mas1[kol];
    std::copy(mas3, mas3 + kol, mas1);
    char mas2[kol];
    std::copy(mas3, mas3 + kol, mas2);
    std::vector<char> v1(mas3, mas3 + kol);
    std::vector<char> v2(v1);
    std::string s1(mas3, mas3 + kol);
    std::string s2(s1);
    InPlaceMergesort(mas3, kol);
    for (int i = 0; i < kol; i++)
        cout << mas3[i] << " ";
    cout << endl << endl;
    in_place_mergesort(&mas1[0], &mas1[0] + kol);
    for (int i = 0; i < kol; i++)
        cout << mas1[i] << " ";
    cout << endl << endl;
    in_place_mergesort(&mas2[0], &mas2[0] + kol);
    for (int i = 0; i < kol; i++)
        cout << mas2[i] << " ";
    cout << endl << endl;
    in_place_mergesort(v1.begin(), v1.end());
    for (int i = 0; i < kol; i++)
        cout << v1[i] << " ";
    cout << endl << endl;
    in_place_mergesort(v2);
    for (int i = 0; i < kol; i++)
        cout << v2[i] << " ";
    cout << endl << endl;
    in_place_mergesort(s1.begin(), s1.end());
    for (int i = 0; i < kol; i++)
        cout << s1[i] << " ";
    cout << endl << endl;
    in_place_mergesort(s2);
    for (int i = 0; i < kol; i++)
        cout << s2[i] << " ";
    cout << endl << endl;
}


Непонятен вот этот кусок кода:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template<typename Iterator>
void in_place_mergesort(Iterator const first, Iterator const last) {
    InPlaceMergesort(&*first, static_cast<int>(distance(first, last)));
}
 
template<typename Container>
void in_place_mergesort(Container &container) {
    in_place_mergesort(container.begin(), container.end());
}
 
template<typename Value, int N>
void in_place_mergesort(Value (&array)[N]) {
    InPlaceMergesort(&array[0], N);
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.