2017-02-12 3 views
0

Ich habe eine Zuweisung, an der ich arbeite, die die Funktion Outline zur Verfügung gestellt hat. Ich soll die Position des Fundstücks zurückgeben, wenn sie gefunden wird, oder -1, falls nicht. Hier ist, dass Gliederungscode:Verwenden des Suchalgorithmus

int linearSearch(const vector<int>& inputVec, int x) { 

und ich habe in der Funktion füllen den find Algorithmus. Mein Verständnis ist, dass find einen Iterator zurückgibt. Ich bin mir einfach nicht sicher, wie ich das nehmen und eine ganze Zahl zurückgeben soll, die die Position oder eine -1 ist. Gerade jetzt versuche ich das auf der Innenseite.

auto it = find(inputVec.begin(), inputVec.end(), x); 

und ich bin mir nicht sicher, wohin ich von dort gehen soll.

+1

Ich bezweifle, sind Sie auf diese Weise angenommen. Eine direkte lineare Suche wäre wahrscheinlich sehr viel schneller. So oder so, wenn Sie es unbedingt mit 'std :: find' wollen, ist dies ein Duplikat von [diese Frage] (http://stackoverflow.com/questions/2152986/what-is-the-most-effective-way) -Herunter-den-Index-eines-Iterator-eines-Stdvektors. – Paul

+1

Sie können den Bereich zwischen dem 'it' und' inputVec.begin() 'überprüfen. – Fureeish

Antwort

2

Sie können wie dieses Handbuch Looping tun:

for(int i=0;i<inputVec.size();i++) { 
    if(inputVec[i]==x) return i; 
} 
return -1; 

Oder wenn Sie find() Funktion verwenden möchten:

auto it = find(inputVec.begin(), inputVec.end(), x); 
if(it==inputVec.end()) return -1; 
return it - inputVec.begin(); 
+0

Das scheint nicht den 'find' Algorithmus zu verwenden, wie von der Zuweisung gefordert. –

+0

if (it == inputVec.end()) gibt -1 zurück; sonst gib es zurück - inputVec.begin(); – algojava

+0

Das sieht besser aus ... jetzt überprüfe es und füge es dann zu deiner Antwort hinzu. –

Verwandte Themen