2010-10-11 10 views

Antwort

34

Die Syntax haben Sie es für Ihre Funktion ist nicht sinnvoll zurückkehren würde (warum sollte der Rückgabewert haben ein Mitglied namens arr?).

Um den Index zu finden, verwenden Sie std::distance und std::find aus dem Header <algorithm>.

int x = std::distance(arr, std::find(arr, arr + 5, 3)); 

Oder man kann es in eine generische Funktion machen:

template <typename Iter> 
size_t index_of(Iter first, Iter last, typename const std::iterator_traits<Iter>::value_type& x) 
{ 
    size_t i = 0; 
    while (first != last && *first != x) 
     ++first, ++i; 
    return i; 
} 

Hier bin ich die Länge der Sequenz zurückkehrt, wenn der Wert nicht gefunden wird (die mit der Art und Weise im Einklang ist die STL-Algorithmen geben den letzten Iterator zurück). Je nach Geschmack möchten Sie vielleicht eine andere Form der Fehlerberichterstattung verwenden.

In Ihrem Fall würden Sie es wie so verwenden:

size_t x = index_of(arr, arr + 5, 3); 
2

die ausgefallene Antwort. Verwenden Sie std :: vector und sucht mit std ::

der einfachen Antwort

Verwendung einer for-Schleife

+7

Die beste Antwort: Verwenden Sie 'std :: find()' auf den Arrays. – sbi

10

Hier ist eine sehr einfache Art und Weise es von Hand zu tun. Sie könnten auch die <algorithm> verwenden, wie Peter vorschlägt.

#include <iostream> 
int find(int arr[], int len, int seek) 
{ 
    for (int i = 0; i < len; ++i) 
    { 
     if (arr[i] == seek) return i; 
    } 
    return -1; 
} 
int main() 
{ 
    int arr[ 5 ] = { 4, 1, 3, 2, 6 }; 
    int x = find(arr,5,3); 
    std::cout << x << std::endl;  
} 
2
#include <vector> 
#include <algorithm> 

int main() 
{ 
    int arr[5] = {4, 1, 3, 2, 6}; 
    int x = -1; 
    std::vector<int> testVector(arr, arr + sizeof(arr)/sizeof(int)); 

    std::vector<int>::iterator it = std::find(testVector.begin(), testVector.end(), 3); 
    if (it != testVector.end()) 
    { 
      x = it - testVector.begin(); 
    } 
    return 0; 
} 

Oder Sie können einfach einen Vektor in einer normalen Art und Weise zu bauen, ohne es aus einem Array von ints zu erstellen und dann die gleichen Lösung verwenden, wie in meinem Beispiel gezeigt.

1
int arr[5] = {4, 1, 3, 2, 6}; 
vector<int> vec; 
int i =0; 
int no_to_be_found; 

cin >> no_to_be_found; 

while(i != 4) 
{ 
    vec.push_back(arr[i]); 
    i++; 
} 

cout << find(vec.begin(),vec.end(),no_to_be_found) - vec.begin(); 
+0

Bitte fügen Sie Ihrer Antwort eine Erklärung hinzu, um sie für andere Leser nützlicher zu machen. –

0

Wir verwenden hier einfach lineare Suche. Zuerst initialisiere den Index gleich -1. Dann suchen Sie das Array, wenn gefunden, weisen Sie den Indexwert in der Indexvariable zu und brechen Sie ab. Andernfalls ist index = -1.

int find(int arr[], int n, int key) 
    { 
    int index = -1; 

     for(int i=0; i<n; i++) 
     { 
      if(arr[i]==key) 
      { 
      index=i; 
      break; 
      } 
     } 
     return index; 
    } 


int main() 
{ 
    int arr[ 5 ] = { 4, 1, 3, 2, 6 }; 
    int n = sizeof(arr)/sizeof(arr[0]); 
    int x = find(arr ,n, 3); 
    cout<<x<<endl; 
    return 0; 
} 
Verwandte Themen