2014-09-28 6 views
1

Итак, я пытаюсь выяснить способ итерации, хотя массив передается в функцию, не зная размера. Я сталкиваюсь с бесконечными циклами с моим кодом, потому что массивы не завершены NULL. Поскольку массив превращается в указатель через функцию, я не могу использовать sizeof (Array)/sizeof (int), чтобы получить количество элементов. Есть ли способ сделать это без NULL, заканчивающего мои массивы?Итерация через массив c через функцию

Моя функция находкой:

int find(const int* arr, int val) 
{ 
    int pos = 0; 
    while (arr != NULL) 
    { 
     if (*arr == val) 
     { 
      return pos; 
     } 
     pos++; 
    } 
    return -1; 
}; 

Мой главный:

int IntArr[] = { 1, 2, 3, 4, 5 }; 
int index = find(IntArr, 4); 
cout << "find(IntArr, 4)" << endl; 
cout << "index: " << index << endl << endl; 
+1

Если вы не знаете размер, вы являетесь SOL. Если вы догадаетесь, вы ошибетесь. Вы говорите, что нет терминатора? Хорошо, тогда вам нужно пройти через другую сторону, как в дополнительном аргументе. – Deduplicator

+1

Передайте размер массива или используйте 'std :: array' или' std :: vector' и передайте по ссылке, поскольку они знают свой размер (или передают их итераторы начала и конца) –

+0

PS есть 'std :: find' function –

ответ

1

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

template <size_t N> 

int find(const int (& arr)[N], int value) 
{ 
    int pos = 0; 

    while (pos < N && arr[pos] != value) ++pos; 

    return pos == N ? -1 : pos; 
} 

Примите во внимание, что существует стандартный алгоритм std::find, объявленный в заголовке <algorithm>. Вы могли бы написать, например,

#include <algorithm> 
#include <iterator> 

//.. 

int IntArr[] = { 1, 2, 3, 4, 5 }; 
auto ptr = std::find(std::begin(IntArr), std::end(IntArr), 4); 
cout << "find(std::begin(IntArr), std::end(IntArr), 4)" << endl; 
cout << "index: " << std::distance(std::begin(IntArr), ptr) << endl << endl; 
+0

Или просто используйте 'std :: find' и пропустите два итератора. – rightfold

Смежные вопросы