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

векторы и алгоритмы сортировки - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить формулу http://www.cyberforum.ru/cpp-beginners/thread746257.html
Дано действительное число y. Получить (1.7t(0.25)+2t(1+y))/(6-t(y^2-1)), где t(x)=Ʃx^2k, k от 0 до 5. Добавлено через 18 часов 24 минуты Тема снова закрыта=)))
C++ Решение уравнения теплопроводности задача: http://www.cyberforum.ru/cpp-beginners/thread746253.html
Выдается ошибка при компиляции (error C2447: missing function header (old-style formal list?)) C++
не работает программа, выдает ошибку C:\Program Files\Microsoft Visual Studio\MyProjects\564356765456\cfvb n.cpp(6) : error C2447: missing function header (old-style formal list?) //------------------------------------------------------------- template <class T> //прототип шаблона семейства функций T abs(T); //--------------------------------------------------------------...
Действия с числами в 16-ой системе счисления C++
Здравствуйте, есть два вопроса. 1) Какой тип данных подходит для чисел в 16-й системе счисления? 2) сможет ли С++ выполнить элементарные алгебраические преобразования с этими числами? (сложить, вычесть, умножить, поделить) или придется писать свою функцию, которая будет это все выполнять?
C++ Аппаратное прерывание от таймера,частота мерцания курсора http://www.cyberforum.ru/cpp-beginners/thread746226.html
здравствуйте !подскажите пожалуйста как в этой программе перехватить частоту мерцания курсора и сделать так чтобы она мерцала раз в 3 секунды например! // Аппаратное прерывание от таймера, генерация звука от 700 до 1200 Гц каждые 3 секунды #include <dos.h> #include <stdio.h> #include <conio.h> #include <bios.h> unsigned long far *count = (unsigned long far*) MK_FP(0x0040, 0x006c); //...
C++ Дана целочисленная квадратная матрица . Написать программу, определяющую след. величины .Дана целочисленная квадратная матрица . Написать программу, определяющую величины: 1) произведение элементов в строках, которые не содержат отрицательных элементов; 2) максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы. 3) суммы четных элементов строк и столбцов матрицы. #include "stdafx.h" #include "stdafx.h" #include <iostream> подробнее

Показать сообщение отдельно
gray_fox
What a waste!
1256 / 1139 / 55
Регистрация: 21.04.2012
Сообщений: 2,361
Завершенные тесты: 3
27.12.2012, 07:20     векторы и алгоритмы сортировки
Цитата Сообщение от Elfenlide Посмотреть сообщение
я думал нужно перегружать функции и делать отдельно для вектора...что-то типо этого: template <class T>
void bogoSort(vector<T> &arr);
Ну можно и так сделать, если хочется, но это будет работать только в vector. Это
C++
1
2
3
4
template<typename Container>
void in_place_mergesort(Container & container) {
   in_place_mergesort(container.begin(), container.end());
}
будкт работать со всем, у чего есть методы begin и end, с std::deque, например. Container ведь может быть любым типом, вот только если у него не будет методов begin/end, будет ошибка компиляции. А это
C++
1
2
3
4
template<typename Value, int N>
void in_place_mergesort(Value (&array)[N]) {
   InPlaceMergesort(&array[0], N);
}
перегрузка для массивов, у них ведь нет методов. Если есть std::begin и std::end, то обе эти ф-ии можно заменить одной:
C++
1
2
3
4
template<typename Container>
void in_place_mergesort(Container & container) {
   in_place_mergesort(std::begin(container), std::end(container));
}
C++
1
2
template<typename Iterator>
void in_place_mergesort(Iterator const first, Iterator const last)
это прототип а ля stl (можешь посмотреть, какие прототипы у алгоритмов stl здесь, например std::sort), последовательность (std::vector, массив и т.д.) представляется в виде двух итераторов: первый указывает на начало последовательности, второй - на "следующий за последним" элемент. Iterator может быть чем угодно, что ведёт себя как итератор, иначе просто не скомпилируется. Т.е. для std::vector<T> Iterator = std::vector<T>::iterator, для массива из int Iterator = int *.
C++
1
InPlaceMergesort(&*first, static_cast<int>(std::distance(first, last)));
Здесь просто вызывается твоя ф-ия. Что бы её вызвать, надо получить указатель на первый элемент (&*first) и размер последовательности (std::distance(first, last)). В действительности это не совсем хорошо, т.к. будет работать только с тем, что последовательно располагает элементы в памяти (массив, std::vector), но не с std::deque, например. Это потому что твоя ф-я явно принимает указатель, что бы от этого избывиться, надо абстрагироваться от указателя до итератора, т.е. переписать прототип твоей ф-ии
C++
1
2
template<class T>
void InPlaceMergesort(T *a, int len);
так, например:
C++
1
2
template<typename Iterator>
void InPlaceMergesort(Iterator a, int len);
или лучше так:
C++
1
2
template<typename Iterator>
void InPlaceMergesort(Iterator begin, Iterator end);
Тогда твоя ф-я будет работать с любыми итераторами с произвольным доступом.

Добавлено через 3 минуты

Не по теме:

да, я очень понятно объясняю)

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