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

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

Войти
Регистрация
Восстановить пароль
 
R_e_n
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 35
#1

Передать итератор на шаблонный вектор в функцию - C++

03.11.2013, 00:13. Просмотров 868. Ответов 2
Метки нет (Все метки)

Здравствуйте.

Есть два вектора
C++ (Qt)
1
2
std::vector<Player> players; //  Player - структура с двумя полями
std::vector<size_t> indices;
Я хочу написать функцию сортировку, в которую можно было бы передать любой из этих массивов:

Если бы у меня были массивы, я бы написал:

C++ (Qt)
1
2
template <class T>
void QuickSort(T* elements, size_t size, bool (*cmpElements)(T*, T*));
И две функции:
C++ (Qt)
1
2
bool cmpPlayers(Player* player1, Player* player2);
bool cmpIndices(size_t* index1, size_t* index2);
Ну и вызывал бы:
C++ (Qt)
1
2
QuickSort(players, players.size(), cmpPlayers);
QuickSort(indices, indices.size(), cmpIndices);
Но для векторов этот код не работает. Я пробовал вот так:
C++ (Qt)
1
2
template <class T>
void QuickSort(typename std::vector<T>::iterator elements, size_t size, bool (*cmpElements)(typename std::vector<T>::iterator, typename std::vector<T>::iterator));
Но ничего не получилось: "не удается составить аргумент шаблон для "T""


1. Подскажите, пожалуйста,как нужно сделать.
2. Буду рад выслушать критику по интерфейсу (не те переменные передаю функцию, не так назвал, не так передаю и пр)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2013, 00:13     Передать итератор на шаблонный вектор в функцию
Посмотрите здесь:

Как передать вектор из main() во внутреннюю функцию ? C++
C++ Функция, дружественная классу, вложенному в шаблонный класс, или как написать итератор.
C++ Как передать вектор в функцию?
Передать функции паметр-итератор C++
C++ Передать вектор объектов в дружественную функцию
Вектор и его итератор C++
Как передать значение в шаблонный класс C++
C++ Вектор и итератор
C++ Как передать массив (двумерный/одномерный вектор) в функцию C++?
Передать в функцию указатель на вектор C++
Вектор и итератор с++ C++
C++ Можно ли передать в функцию либо вектор, либо список, если да, то как?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт CЭксперт С++
 Аватар для MrGluck
6227 / 3472 / 424
Регистрация: 29.11.2010
Сообщений: 9,178
03.11.2013, 05:02     Передать итератор на шаблонный вектор в функцию #2
Цитата Сообщение от R_e_n Посмотреть сообщение
1. Подскажите, пожалуйста,как нужно сделать.
передавать итераторы начала и конца

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
#include <iostream>
#include <vector>
 
template <typename T>
void swap(T& a, T& b)
{
    T c(a);
    a = b;
    b = c;
}
 
template <typename ForwardIterator>
void bubbleSort(ForwardIterator beg, ForwardIterator end)
{
    for (ForwardIterator it1 = beg; it1 != end; ++it1)
        for (ForwardIterator it2 = end-1; it2 != it1; --it2)
            if (*it2 < *(it2-1))
                swap(*(it2-1), *it2);
}
 
template <typename ForwardIterator, typename Compare>
void bubbleSort(ForwardIterator beg, ForwardIterator end, Compare comp)
{
    for (ForwardIterator it1 = beg; it1 != end; ++it1)
        for (ForwardIterator it2 = end-1; it2 != it1; --it2)
            if (comp(*it2, *(it2-1)))
                swap(*(it2-1), *it2);
}
 
template <typename T>
struct greater
{
    bool operator() (const T& x, const T& y) const {return y < x; }
};
 
int main()
{
    std::vector<int> v = {4, 3, 5, 2, 1};
    bubbleSort(v.begin(), v.end());
    for (auto &x: v) // C++11
        std::cout << x << " ";
    std::cout << std::endl;
 
    std::vector<double> v2 = {2.1, 5.2, 9.0, 1.1, 5.7};
    bubbleSort(v2.begin(), v2.end(), greater<double>());
    for (auto &x: v2) // C++11
        std::cout << x << " ";
    std::cout << std::endl;
}
R_e_n
0 / 0 / 0
Регистрация: 30.07.2012
Сообщений: 35
03.11.2013, 22:53  [ТС]     Передать итератор на шаблонный вектор в функцию #3
Спасибо огромное, помогло
Yandex
Объявления
03.11.2013, 22:53     Передать итератор на шаблонный вектор в функцию
Ответ Создать тему
Опции темы

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