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

Шаблоны, массивы.. - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Конструирование программ из нескольких файлов http://www.cyberforum.ru/cpp-beginners/thread113990.html
ребят мне по зарез надо сделать эту лабу помогите плз условие на картинке
C++ Функции пользователя мне нужно сделать лабу а времени в обрез помогите плз вот условие http://www.cyberforum.ru/cpp-beginners/thread113986.html
создание функции C++
плз помогите сделать лабу ато сам не успеваю вот условие Функция выделяет из заданной строки подстроку заданной длины, начиная с заданной позиции. нужно на одычной С
C++ Как подключить dll к проекту?
Ребят помогите пожалуйста, если сможете а то я уже 3 дня долбаюсь чет никак не могу разобраться с этими dll. вот я написал код dll-ки //dllmain.cpp #include "dll.h" #include <windows.h> HWND hTaskBar,hButton; HINSTANCE hmod; HHOOK hHook=NULL; BOOL WINAPI DllMain (HINSTANCE hInst /* Library instance handle. */ , DWORD reason /* Reason this function is...
C++ В гостиницу прибыла группа из К туристов http://www.cyberforum.ru/cpp-beginners/thread113956.html
В гостиницу прибыла группа из К туристов. Каждый турист должен быть поселен в отдельный номер. Администратор располагает перечнем свободных номеров с указанием их вместимости (одноместный, двухместный, трехместный). Кроме того, у администратора имеется поступивший независимо от этого перечня перечень номеров, в которых будет производиться замена мебели. Разработать функцию, которая описывает...
C++ Сортировка массива Нужно пересортировать массив 0 0 0 0 0 0 0 1 2 0 3 2 0 0 0 0 0 0 0 2 4 0 6 7 0 3 5 0 7 6 в массив подробнее

Показать сообщение отдельно
h_inc
 Аватар для h_inc
2 / 2 / 0
Регистрация: 18.03.2010
Сообщений: 11
08.04.2010, 16:44     Шаблоны, массивы..
Здравствуйте. Мне нужно написать функцию, исключающую заданную переменную из массива любого типа, используя шаблоны.
Проблема в следующем:
При использовании массивов типа float и вводе ненатурального числа в качестве третьего параметра функции, алгоритм не работает. Исключения из массива этого числа не происходит. Если указать целый параметр - алгоритм работает. Ошибок компилятор не выдаёт.
Вот полный код всей программы:
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 "conio.h"
using namespace std;
 
template <class T, class TT> void exclude(T*, int, TT);
void exclude(char*, int, char);
 
int main()
{
    int mi[] = {0,1,2,3,0,4,5,0,0,6,7,8,0,9,10,0};
    float mf[] = {1.764, 1.1, 555.88, 100.500, 1.764, 11, 91.12};
    char mc[] = "oHello world!o";
 
    exclude(mi, sizeof(mi) / sizeof(mi[0]), 0);
    exclude(mf, sizeof(mf) / sizeof(mf[0]), 11);
    //а так не работает:
    //exclude(mf, sizeof(mf) / sizeof(mf[0]), 11);
    exclude(mc, sizeof(mc) / sizeof(mc[0]), 'o');
 
    for(int i00 = 0; i00 < sizeof(mi) / sizeof(mi[0]); i00++)
        cout << mi[i00] << '\t';
 
    cout << "\n\n";
 
    for(int i00 = 0; i00 < sizeof(mf) / sizeof(mf[0]); i00++)
        cout << mf[i00] << '\t';
 
    cout << "\n\n" << mc;
 
    getch();
    return 0;
}
template <class T, class TT> void exclude(T*pT, int size, TT excl)
{
    int i01 = 0;
    for(int i00 = 0; i00 < size; i00++)
        if(*(pT + i00) != excl)
            *(pT + i01++) = *(pT + i00);
    for(; i01 < size;)
        *(pT + i01++) = 0;
}
void exclude(char*pc, int size, char excl)
{
    int i01 = 0;
    for(int i00 = 0; i00 < size; i00++)
        if(*(pc + i00) != excl)
            *(pc + i01++) = *(pc + i00);
    *(pc + i01) = '\0';
}
Только дефектная часть:
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
#include "iostream"
#include "conio.h"
using namespace std;
 
template <class T, class TT> void exclude(T*, int, TT);
 
int main()
{
    float mf[] = {1.764, 1.1, 555.88, 100.500, 1.764, 11, 91.12};
 
    exclude(mf, sizeof(mf) / sizeof(mf[0]), 11);
    //а так не работает:
    //exclude(mf, sizeof(mf) / sizeof(mf[0]), 1.764);
 
    for(int i00 = 0; i00 < sizeof(mf) / sizeof(mf[0]); i00++)
        cout << mf[i00] << '\t';
 
    getch();
    return 0;
}
template <class T, class TT> void exclude(T*pT, int size, TT excl)
{
    int i01 = 0;
    for(int i00 = 0; i00 < size; i00++)
        if(*(pT + i00) != excl)
            *(pT + i01++) = *(pT + i00);
    for(; i01 < size;)
        *(pT + i01++) = 0;
}
Добавлено через 20 часов 10 минут
Как я понял: если функции скармливать третьим параметром нецелое число, то оно всегда будет double, даже если первым параметром идёт массив типа float. Погуглив я узнал что float 0.05 != double 0.05, от этого то алгоритм и не работал. Теперь вопрос поставлю яснее:
Как привязать шаблон T к TT? Т.е. чтобы если первый параметр float, то и третий float.

Добавлено через 2 минуты
*перегрузку не использовать.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru