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

QSort, не могу устранить ошибку в программе - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Чтение данных с клавиатуры http://www.cyberforum.ru/cpp-beginners/thread234978.html
Здраствуйте, помогите пожалуйсто, как читать данные с клавиатуры (я не cin имею ввиду). Задача такая запускается программа, сворачивается и независемо не от чего она записыват все клавиши на которые я нажимаю включая enter пробел и т.д., как такое можно сделать, я незнаю даже в какую сторону капать...
C++ arrays_rand Всем доброго времени суток! Кто подскажет,как: 1.Модифицировать прогу так,чтобы кол-во элементов в массиве задавал пользователь? 2.Реализовать прогу,которая генерирует 100 чисел от -50 до 50,выводит их на экран,после чего заменяет отрицательные числа на 0,а положительные на 1.Интересная задачка,правда? http://www.cyberforum.ru/cpp-beginners/thread234972.html
Borland C 3.1 exe приложение и язык ввода C++
Созданное в BC 3.1 exe приложение запускаю под XP. Трабл такой - не могу переключить язык ввода для scanf на русский. Куда копать?
автозагрузка C++
здравствуйте!!!!!!!!!помогите есть папка или файл который отвечает за автозагрузку программ,грубо говоря я внашу туда расположение файла и он загружается с windows.но условие-не через реестр!!!!заранее большое спасибо!!!!!!!!!!!!!!!!!!!
C++ Определить функцию, переводящую число в двоичную систему счисления... http://www.cyberforum.ru/cpp-beginners/thread234945.html
Помогите пожалуйста с решением задач, если конечно не трудно)) 1. Решить с помощью вложенного цикла. Найти все натуральные числа, в диапазоне между m и n (m<n), десятичная запись которых есть строго возрастающая последовательность цифр. Подсчитать количество таких чисел. 2. Определение и вызов функций. Определить функцию, переводящую число в двоичную систему счисления и проверяющую,...
C++ Потоки. Синхронизация. Передача параметра при создании потока. Здравствуйте! Разбираюсь с потоками. Возникли проблемы то ли с синхронизацией, то ли с созданием потоков и передачей в потоковую функцию параметров, я конкретно не знал с чем. Ну и в концов замучившись полностью, я решил написать небольшой кодик, всё же с ним легче разбираться. #include "stdafx.h" #include <iostream> #include "windows.h" #include "stdlib.h" using namespace std; подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
28.01.2011, 06:44     QSort, не могу устранить ошибку в программе
Главная ошибка - это то, что функция быстрой сортировки спроектирована у тебя так, что она может у тебя работать только с массивом int, но не с вектором элементов int.

А если написать функцию сортировки так, то она будет работать с любым массивом С и любым контейнером (с двунаправленными итераторами):
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
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <string>
#include <ctime>
 
template<class Iterator>
void quickSort(Iterator first, Iterator last)
{
    Iterator x = first;
        
    Iterator i = first;
    Iterator j = last - 1;
    do
    {
    while(*i < *x) ++i;
    while(*x < *j) --j;
    if(i <= j)
        std::swap(*i++, *j--);
    }
    while(i <= j);
    if(first < j) quickSort(first, j + 1);
    if(i < last) quickSort(i, last);
}
 
template<class Iterator>
bool testIfSorted(Iterator first, Iterator last)
{
    Iterator it = first + 1;
    while(it != last)
    if(*first++ > *it++)
        return false;
    return true;
}
 
template<class Iterator>
void test(Iterator first, Iterator last, const std::string& msg)
{
    std::cout << "Testing " << msg << std::endl;
    std::cout << "Before sorting:" << std::endl;
    std::copy(first, last, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
    quickSort(first, last);
    std::cout << "After sorting:" << std::endl;
    std::copy(first, last, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
    std::cout << "Result: "
          << (testIfSorted(first, last) ? "success" : "failure")
          << std::endl << std::endl;
}
 
int main()
{
    srand(static_cast<size_t>(time(NULL)));
    const size_t size = 15;
    std::vector<int> ivec(size);
    for(std::vector<int>::iterator it = ivec.begin(); it != ivec.end(); ++it)
    *it = rand() % 100 + 1;
    /* Тестируем работу с контейнерным классом */
    test(ivec.begin(), ivec.end(), "std::vector<int> container");
 
    int iarray[size];
    for(int* ip = iarray; ip != iarray + size; ++ip)
    *ip = rand() % 100 + 1;
    /* Тестируем работу с обычным массивом */
    test(iarray, iarray + size, "plain array of int");
    
    return 0;
}

Не по теме:

И да, если пишешь "using namespace std;", то писать "using std::vector" уже не надо.

 
Текущее время: 06:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru