2010-10-11 6 views

Respuesta

34

La sintaxis que tiene allí para su función no tiene sentido (¿por qué el valor de retorno tiene un miembro llama arr?).

Para encontrar el índice, use std::distance y std::find del encabezado <algorithm>.

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

O puede presentar en una función más genérica:

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; 
} 

Aquí, voy a volver la longitud de la secuencia si no se encuentra el valor (lo cual es consistente con la forma en la Algoritmos STL devuelven el último iterador). Dependiendo de su gusto, es posible que desee utilizar alguna otra forma de informe de fallas.

En su caso, usted podría usarlo de esta manera:

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

la respuesta elegante. Utilizar std :: vector y buscar con std :: encontrar

la respuesta simple

utilizar un bucle

+7

La mejor respuesta: use 'std :: find()' en las matrices. – sbi

10

Esta es una manera muy simple de hacerlo a mano. También podría usar el <algorithm>, como sugiere Peter.

#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; 
} 

O puede simplemente construir un vector de una manera normal, sin crear desde una matriz de enteros y luego usar la misma solución que se muestra en mi ejemplo.

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

Agregue algunas explicaciones a su respuesta para que sea más útil para otros lectores. –

0

Aquí utilizamos simplemente búsqueda lineal. Al principio, inicialice el índice igual a -1. Luego busque en la matriz, si la encuentra, asigne el valor del índice en la variable de índice y corte. De lo contrario, índice = -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; 
} 
Cuestiones relacionadas