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

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

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

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

20.07.2014, 19:56. Просмотров 955. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2014, 19:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция, которая определяет, входит ли значение в массив - оценка реализации (C++):

Функция,которая определяет, встречается ли заданная буква, которая передается в функцию как параметр - C++
Написать функцию, которая определяет, встречается ли заданная буква, которая передается в функцию как параметр, во введенной строке....

функция, которая определяет минимальный элемент массива - C++
Напишите функцию, которая определяет минимальный элемент массива (его значение и номер). Внутри функции запрещено использовать команды cin...

Функция, которая для одного целого числа определяет, является ли оно кратно числу К - C++
1) функцию, которая для одного целого числа (не для одномерного массива и не для матрицы) определяет, является ли оно кратно числу К, где К...

Функция, которая определяет количество элементов передаваемого массива, которые больше определенного числа - C++
Напишите функцию, которая определяет количество элементов передаваемого массива, которые больше определенного числа, это число тоже...

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

Написать программу, которая определяет симметричный массив или нет - C++
Написать программу, которая определяет симметричный массив или нет

24
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,213
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;
}
2
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,099
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;
}
0
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,213
20.07.2014, 20:07 #4
0x10,
а не работает потому что он не указал одну маленькую детальку
признак окончания массива 0, как в строке
Цитата Сообщение от GetHelp Посмотреть сообщение
while (*Array)
0
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,099
20.07.2014, 20:10 #5
ValeryS, вижу, потому и написал такой пример. Я не вижу причин, по которым такая функция должна предъявлять такие требования к контейнеру. Как и не вижу причин, по которым она должна уметь работать с массивом, но не в состоянии обработать вектор.
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
20.07.2014, 20:10  [ТС] #6
Цитата Сообщение от ValeryS Посмотреть сообщение
много лишних телодвижений
вот прямо с твоей проги, просто уменьшил
бесспорно вы правы, че то перемудрил... спс
Цитата Сообщение от 0x10 Посмотреть сообщение
GetHelp, не работает. Подробно расписывать мне сейчас лень.
странно а у меня работает...
Цитата Сообщение от ValeryS Посмотреть сообщение
0x10,
а не работает потому что он не указал одну маленькую детальку
символ окончания массива 0, как в строке
эмм не понял о чем вы? тут как бы проверка пока не NULL
0
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,213
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]));
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
20.07.2014, 20:18  [ТС] #8
ValeryS, аа ясно... а нельзя все таки как то без передачи размера массива? не хочу лишние параметры... а если сравнивать скажем с nullptr?
0
0x10
2479 / 1654 / 248
Регистрация: 24.11.2012
Сообщений: 4,099
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;
}
0
-=ЮрА=-
Заблокирован
Автор FAQ
20.07.2014, 20:24 #10
Цитата Сообщение от GetHelp Посмотреть сообщение
не хочу лишние параметры... а если сравнивать скажем с nullptr?
- для динамического массива штука sizeof(Arr)/sizeof(Arr[0]) не сработает будет 4 / sizeof(Arr[0]) всегда(т.к будет делиться размер поинтера на размер нулевого элемента). По поводу кода, я не смог понять зачем он?Если так хочется использовать шаблоны - напиши свой вектор, вот там да будет идти параметром всего один объект.
0
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,213
20.07.2014, 20:29 #11
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
для динамического массива штука sizeof(Arr)/sizeof(Arr[0]) не сработает будет 4 / sizeof(Arr[0])
а у динамического массива размер известен иначе как будешь создавать

-=ЮрА=-, приветствую давно не виделись
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
20.07.2014, 20:31  [ТС] #12
0x10, чет не понял че вы делаете, но выглядит еще более громоздко...
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
По поводу кода, я не смог понять зачем он?Если так хочется использовать шаблоны - напиши свой вектор, вот там да будет идти параметром всего один объект.
честно говоря мне уже сто раз попадались ситуации когда такая штука была бы очень кстати... я просто изначально изучал делфи довольно долго и теперь в си мне все время не хватает его функционала вот и пытаюсь изобретать по своему...
0
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,213
20.07.2014, 20:31 #13
Цитата Сообщение от GetHelp Посмотреть сообщение
а нельзя все таки как то без передачи размера массива?
можно 0x10, показал один из вариантов
но в любом случае нужен какой то параметр, иначе как функция будет узнавать что достигла конца массива?
0
GetHelp
-7 / 61 / 6
Регистрация: 27.02.2013
Сообщений: 1,112
20.07.2014, 20:32  [ТС] #14
Цитата Сообщение от ValeryS Посмотреть сообщение
иначе как функция будет узнавать что достигла конца массива?
Цитата Сообщение от GetHelp Посмотреть сообщение
а если сравнивать скажем с nullptr?
не?
0
-=ЮрА=-
Заблокирован
Автор FAQ
20.07.2014, 20:38 #15
Цитата Сообщение от GetHelp Посмотреть сообщение
а если сравнивать скажем с nullptr?
- не будет нулпоинтера, при достижении конца массива за его пределами будет мусор(не нулевой)
Цитата Сообщение от GetHelp Посмотреть сообщение
честно говоря мне уже сто раз попадались ситуации когда такая штука была бы очень кстати
- ну так напиши, как раз и уровень повысишь и разберёшся получше с шаблонами(даже на форуме полно примеров)

Не по теме:

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

0
20.07.2014, 20:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2014, 20:38
Привет! Вот еще темы с ответами:

Программа, которая определяет, какую следует удалить цифру из числа, чтобы получить максимальное значение - C++
Программа, которая определяет номер цифры, какую следует выкреслить, что бы получить максимальное значение. Например: 783 - вычеркиваем 7 -...

Написать программу, которая определяет, содержит ли заданный массив число, равное S - C++
Определить, содержит ли заданный массив число, равное S.

Функция, которая находит минимальное значение - C++
Вобщем в программе вычесляются значения косинуса на интервале Нужна функция которая найдет найменьшее из этих значений #include...

Функция, которая возвращает требуемое значение - C++
Дан одномерный массив из n чисел. Элементами массива являются случайные целые числа от -10 до 10 включительно. Напишите функцию, которая...


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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