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

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

Войти
Регистрация
Восстановить пароль
 
 
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
#1

Функция, которая определяет, входит ли значение в массив - оценка реализации - C++

20.07.2014, 19:56. Просмотров 881. Ответов 24
Метки нет (Все метки)

привет всем, это снова я велосипедописатель на сей раз я решил опять заюзать так понравившееся мне шаблоны для написания на сей раз более простой, но довольно полезной (на мой взгляд) функции которая определяет входит ли значение в массив, прошу вашей оценки, так ли все хорошо как мне кажется?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
template <typename T>
bool ValueInArray(T Value, T* Array)
{
    int count = 0;
    bool retval = false;
    while (*Array)
    {
        count++;
        if (Value == *(Array++))
        {
            retval = true;
            break;
        }
        else
        {
            retval = false;
        }
    }
    Array -= count * sizeof(T);
    return retval;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2014, 19:56     Функция, которая определяет, входит ли значение в массив - оценка реализации
Посмотрите здесь:
C++ Функция,которая определяет, встречается ли заданная буква, которая передается в функцию как параметр
функция, которая определяет минимальный элемент массива C++
Функция, которая определяет количество элементов передаваемого массива, которые больше определенного числа C++
C++ Функция, которая для одного целого числа определяет, является ли оно кратно числу К
C++ Функция для отсортированного массива целых чисел определяет, содержится ли в нем заданное значение
C++ Написать программу, которая определяет симметричный массив или нет
C++ Программа, которая определяет, какую следует удалить цифру из числа, чтобы получить максимальное значение
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,737
20.07.2014, 20:03     Функция, которая определяет, входит ли значение в массив - оценка реализации #2
много лишних телодвижений
вот прямо с твоей проги, просто уменьшил
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template <typename T>
bool ValueInArray(T Value, T* Array)
{
  T* ArrayTmp=Array;
    while (*ArrayTmp)
    {
     if (Value == *(ArrayTmp++))
        {
           return  true;
         }
     
    }
     return false;
}
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,012
20.07.2014, 20:04     Функция, которая определяет, входит ли значение в массив - оценка реализации #3
GetHelp, не работает. Подробно расписывать мне сейчас лень.
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
#include <iostream>
 
template <typename T>
bool ValueInArray(T Value, T* Array)
{
    int count = 0;
    bool retval = false;
    while (*Array)
    {
        count++;
        if (Value == *(Array++))
        {
            retval = true;
            break;
        }
        else
        {
            retval = false;
        }
    }
    Array -= count * sizeof(T);
    return retval;
}
 
int main()
{
    int arr[] = {1, 0, 2, 3, 4};
    std::cout << ValueInArray(2, arr) << std::endl; 
    return 0;
}
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,737
20.07.2014, 20:07     Функция, которая определяет, входит ли значение в массив - оценка реализации #4
0x10,
а не работает потому что он не указал одну маленькую детальку
признак окончания массива 0, как в строке
Цитата Сообщение от GetHelp Посмотреть сообщение
while (*Array)
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,012
20.07.2014, 20:10     Функция, которая определяет, входит ли значение в массив - оценка реализации #5
ValeryS, вижу, потому и написал такой пример. Я не вижу причин, по которым такая функция должна предъявлять такие требования к контейнеру. Как и не вижу причин, по которым она должна уметь работать с массивом, но не в состоянии обработать вектор.
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
20.07.2014, 20:10  [ТС]     Функция, которая определяет, входит ли значение в массив - оценка реализации #6
Цитата Сообщение от ValeryS Посмотреть сообщение
много лишних телодвижений
вот прямо с твоей проги, просто уменьшил
бесспорно вы правы, че то перемудрил... спс
Цитата Сообщение от 0x10 Посмотреть сообщение
GetHelp, не работает. Подробно расписывать мне сейчас лень.
странно а у меня работает...
Цитата Сообщение от ValeryS Посмотреть сообщение
0x10,
а не работает потому что он не указал одну маленькую детальку
символ окончания массива 0, как в строке
эмм не понял о чем вы? тут как бы проверка пока не NULL
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,737
20.07.2014, 20:16     Функция, которая определяет, входит ли значение в массив - оценка реализации #7
Цитата Сообщение от GetHelp Посмотреть сообщение
эмм не понял о чем вы? тут как бы проверка пока не NULL
ну а теперь посмотри на массив
Цитата Сообщение от 0x10 Посмотреть сообщение
int arr[] = {1, 0, 2, 3, 4};
все он дальше второго элемента не пойдет
Цитата Сообщение от 0x10 Посмотреть сообщение
вижу, потому и написал такой пример.
Вижу, что видишь
Автор не видит

Добавлено через 4 минуты
чтобы перебирал весь массив, не зависимо от элементов нужно явно передавать размер
что то типа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template <typename T>
bool ValueInArray(T Value, T* Array, size_t sz)
{
for(size_t i=0;i<sz;i++)
 {
 if(Array[i]==Value)
  {
   return true;
  }
 
 }
return false;
}
ну и вызывать как то так

C++
1
ValueInArray(2,arr,sizeof(arr)/sizeof(arr[0]));
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
20.07.2014, 20:18  [ТС]     Функция, которая определяет, входит ли значение в массив - оценка реализации #8
ValeryS, аа ясно... а нельзя все таки как то без передачи размера массива? не хочу лишние параметры... а если сравнивать скажем с nullptr?
0x10
2459 / 1631 / 238
Регистрация: 24.11.2012
Сообщений: 4,012
20.07.2014, 20:23     Функция, которая определяет, входит ли значение в массив - оценка реализации #9
Цитата Сообщение от GetHelp Посмотреть сообщение
а нельзя все таки как то без передачи размера массива?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
 
template <class Iterator, class T>
bool ValueInArray(Iterator first, Iterator last, const T& value) {
    while (first != last) {
        if (*first == value) {
            return true;
        }
        ++first;
    }
    
    return false;
}
 
int main() {
    int arr[] = {1, 0, 2, 3, 4};
    std::cout << ValueInArray(arr, arr + sizeof(arr) / sizeof(*arr), 4) << std::endl; 
    return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
20.07.2014, 20:24     Функция, которая определяет, входит ли значение в массив - оценка реализации #10
Цитата Сообщение от GetHelp Посмотреть сообщение
не хочу лишние параметры... а если сравнивать скажем с nullptr?
- для динамического массива штука sizeof(Arr)/sizeof(Arr[0]) не сработает будет 4 / sizeof(Arr[0]) всегда(т.к будет делиться размер поинтера на размер нулевого элемента). По поводу кода, я не смог понять зачем он?Если так хочется использовать шаблоны - напиши свой вектор, вот там да будет идти параметром всего один объект.
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,737
20.07.2014, 20:29     Функция, которая определяет, входит ли значение в массив - оценка реализации #11
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
для динамического массива штука sizeof(Arr)/sizeof(Arr[0]) не сработает будет 4 / sizeof(Arr[0])
а у динамического массива размер известен иначе как будешь создавать

-=ЮрА=-, приветствую давно не виделись
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
20.07.2014, 20:31  [ТС]     Функция, которая определяет, входит ли значение в массив - оценка реализации #12
0x10, чет не понял че вы делаете, но выглядит еще более громоздко...
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
По поводу кода, я не смог понять зачем он?Если так хочется использовать шаблоны - напиши свой вектор, вот там да будет идти параметром всего один объект.
честно говоря мне уже сто раз попадались ситуации когда такая штука была бы очень кстати... я просто изначально изучал делфи довольно долго и теперь в си мне все время не хватает его функционала вот и пытаюсь изобретать по своему...
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,737
20.07.2014, 20:31     Функция, которая определяет, входит ли значение в массив - оценка реализации #13
Цитата Сообщение от GetHelp Посмотреть сообщение
а нельзя все таки как то без передачи размера массива?
можно 0x10, показал один из вариантов
но в любом случае нужен какой то параметр, иначе как функция будет узнавать что достигла конца массива?
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
20.07.2014, 20:32  [ТС]     Функция, которая определяет, входит ли значение в массив - оценка реализации #14
Цитата Сообщение от ValeryS Посмотреть сообщение
иначе как функция будет узнавать что достигла конца массива?
Цитата Сообщение от GetHelp Посмотреть сообщение
а если сравнивать скажем с nullptr?
не?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2014, 20:38     Функция, которая определяет, входит ли значение в массив - оценка реализации
Еще ссылки по теме:
C++ Написать программу, которая определяет, содержит ли заданный массив число, равное S
Функция которая возвращает значение и цикл C++
Функция, которая возвращает значение в классе C++
Функция, которая возвращает требуемое значение C++
Функция, которая вычисляет значение aв степени b C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
20.07.2014, 20:38     Функция, которая определяет, входит ли значение в массив - оценка реализации #15
Цитата Сообщение от GetHelp Посмотреть сообщение
а если сравнивать скажем с nullptr?
- не будет нулпоинтера, при достижении конца массива за его пределами будет мусор(не нулевой)
Цитата Сообщение от GetHelp Посмотреть сообщение
честно говоря мне уже сто раз попадались ситуации когда такая штука была бы очень кстати
- ну так напиши, как раз и уровень повысишь и разберёшся получше с шаблонами(даже на форуме полно примеров)

Не по теме:

Цитата Сообщение от ValeryS Посмотреть сообщение
-=ЮрА=-, приветствую давно не виделись
- да давно не пересекались в ветках, я тоже рад

Yandex
Объявления
20.07.2014, 20:38     Функция, которая определяет, входит ли значение в массив - оценка реализации
Ответ Создать тему
Опции темы

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