Форум программистов, компьютерный форум CyberForum.ru

Действительно универсальная сортировка - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ prototype http://www.cyberforum.ru/cpp-beginners/thread244556.html
Доброго всем времени суток!Если объявить прототипы функции до главной void main,то как вводить переменные для switch?Допустим,такая задача:рассчитать площади и периметры фигур-круга,квадрата,прямоугольника,треугольника.Запросить у пользователя величины сторон,радиусов и т.д.,и применить меню do while?
C++ Аргументы по умолчанию C++ Здравствуйте! Подскажите пожалуйста как можно присвоить строку "Hello" переменной *char в прототипе функции, чтобы *a была по умолчанию "Hello" ? Например такой прототип void function(char *a, int b=3); http://www.cyberforum.ru/cpp-beginners/thread244551.html
C++ удваиваивание каждого символа строки
Задание. Написать функцию, которая удваивает каждый символ строки. Может у функций работы со строками есть такая функция, которая удваивает каждый символ строки? Не могу найти. Может кто-то подскажет?
C++ Границы массива
Подскажите пожалуйста, что надо изменить в программке, чтобы "Т" не выходила за границы массива. Спасибо! #include <iostream> // cin, cout #include <clocale> // поддержка русского языка #include <conio.h> // _getch() #include <stdlib.h> // поддержка функции очистки экрана system("cls") using namespace std;
C++ Дерево оптимального поиска. http://www.cyberforum.ru/cpp-beginners/thread244537.html
Пожалуйста помогите,реализуйте задачу,дерево оптимального поиска с помощью первого приближенного алгоритма. я не много не недопонимаю не которые моменты. вот алгоритм V.use – логическая переменная в структуре вершины дерева, которая показывает, что данная вершина была использована при построении дерева; V.w – вес вершины. Root : = NIL DO (i = 1,...,n) V.use = ЛОЖЬ
C++ Переделать произведение Была задача - умножить вектор-строку на матрицу(размеры матрицы фиксированы) Вот я решила - --------------------------------------------------------------------------- #include <vcl.h> #include <conio.h> #include <iostream.h> #include <stdio.h> #include <stdlib.h> #include <math.h> подробнее

Показать сообщение отдельно
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7955 / 4717 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
18.02.2011, 00:30     Действительно универсальная сортировка
Вопрос заключается в следующем, возможно-ли сделать такую?

Есть сортировка
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
template <typename Iterator, typename Pred>
void quick_sort (Iterator first, Iterator last, Pred pred) {
        Iterator base = first;
        Iterator new_last = last;
                
        if (first != last && first++ != --last) {               
                while (first != last) {
                        while (first != last && !pred(*first, *base)) ++first;
                        while (first != last && pred(*last, *base)) --last;
                        
                        if (first != last) std::swap(*first, *last);
                }
                
                if (pred(*base, *first)) std::swap(*base, *first);
                        
                quick_sort(base, first, pred);
                quick_sort(first, new_last, pred);
        }
}
Сортировка не моя. Но все же.
Допустим так же, что у нас есть сортировка которая сортирует список элементов.

C++
1
2
3
4
void sort()
{
    quick_sort(begin(), end(), std::greater<T>());
}
ПОД-ы отсортирует без проблем.
Но допустим так же, что у нас есть такие классы.

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
class Figure
{
public:
   virtual int GetSquare()=0;
   virtual bool operator <(Figure* Ob)=0;
};
 
class Square:public Figure
{
public:
   Square(int a_):a(a_)
   {
   }
   int GetSquare()
   {
       return a*a;
   }
   bool operator <(Figure* Ob)
   {
      return GetSquare() < static_cast<Square*>(Ob)->GetSquare();
   } 
private:
   int a;
};
 
class Triangle:public Figure
{
public:
   Triangle(int a_):a(a_)
   {
   }
   int GetSquare()
   {
       return (a*a)/2;
   }
   bool operator <(Figure* Ob)
   {
      return GetSquare() < static_cast<Triangle*>(Ob)->GetSquare();
   } 
private:
   int a;
};
 
int main()
{
    List<Figure*> Lst;
    Lst.push_back(new Square(5));
    Lst.push_back(new Triangle(4));
    Lst.push_back(new Square(7));
    Lst.push_back(new Triangle(3));
    Lst.sort();
    for(List<Figure*>::iterator iter=Lst.begin(); iter != Lst.end(); ++iter)
    {
         std::cout<<(*iter)->GetSquare()<<'\n';
    }
    return 0;
}
Сортировка в этом случае не сработает. Ибо даже не будет заходить в функцию сравнения элементов, потому как один из параметров мол должен быть объектом класса, но не указателем на него (что-то вроде). Получается для указателей нужна другая сортировка с разыменованием первого параметра? Или возможна универсальная? Как быть?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 04:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru