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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Конструирование программ из нескольких файлов http://www.cyberforum.ru/cpp-beginners/thread113990.html
ребят мне по зарез надо сделать эту лабу помогите плз условие на картинке
C++ Функции пользователя мне нужно сделать лабу а времени в обрез помогите плз вот условие http://www.cyberforum.ru/cpp-beginners/thread113986.html
C++ Абстрактный тип данных - Список
Здравствуйте! Недавно начал изучать язык СИ, возникли проблемы, в универе задали: Реализовать АТД Список (List) для любого типа данных и его операторы Insert, Locate, Retrieve, Delete, Next,...
создание функции C++
плз помогите сделать лабу ато сам не успеваю вот условие Функция выделяет из заданной строки подстроку заданной длины, начиная с заданной позиции. нужно на одычной С
C++ Как подключить dll к проекту? http://www.cyberforum.ru/cpp-beginners/thread113976.html
Ребят помогите пожалуйста, если сможете а то я уже 3 дня долбаюсь чет никак не могу разобраться с этими dll. вот я написал код dll-ки //dllmain.cpp #include "dll.h" #include <windows.h> HWND...
C++ В гостиницу прибыла группа из К туристов В гостиницу прибыла группа из К туристов. Каждый турист должен быть поселен в отдельный номер. Администратор располагает перечнем свободных номеров с указанием их вместимости (одноместный,... подробнее

Показать сообщение отдельно
h_inc
2 / 2 / 0
Регистрация: 18.03.2010
Сообщений: 11

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

08.04.2010, 16:44. Просмотров 468. Ответов 6
Метки (Все метки)

Здравствуйте. Мне нужно написать функцию, исключающую заданную переменную из массива любого типа, используя шаблоны.
Проблема в следующем:
При использовании массивов типа 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 минуты
*перегрузку не использовать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru