2016-06-01 13 views
1

Ich bin nicht in C++. Ich habe ein sehr kurzes C++ - Skript, das ich in PHP zu konvertieren versuche, das sich mit Vektoren beschäftigt.Vektor Manipulation

Aus der Online-Dokumentation entnehme ich, dass Vektoren Listen von Dingen sind, ähnlich wie Arrays in PHP, aber mit weniger Features. Ich habe jedoch Schwierigkeiten, eine gute Dokumentation zur Vektormanipulation zu finden.

Zum Beispiel

real32 test(std::vector<T>::iterator First, std::vector<T>::iterator Last) 
{ 
    if(Last - First > 0) { 
     // do stuff 
    } 
} 

In diesem Snippet ich eine Vermutung an einer Reihe von Ergebnissen mit Last - First zu tun, riskieren können.

  • Der Unterschied in der Anzahl von Elementen zwischen jedem Vektor
  • Die Differenz der Summe der Elemente zwischen jedem Vektor
  • Der Unterschied zwischen den einzelnen Elementen in jedem Vektor (Erraten von iterator - aber dies könnte sein, die for-Schleife in der //do stuff part)

ich RTFM versuche aber die some von der on-line resources ich über gestolpert nicht stoßen als besonders aufschlussreich (obwohl mayb e Ich kann die richtige Frage nicht stellen/suchen

Was macht Last - First tatsächlich in diesem Fall?

+1

Beachten Sie, dass zwei Iteratoren zu zwei verschiedenen Vektoren gehören können! – Ajay

+0

@Ajay Wenn sie dies tun, wird diese Funktion undefiniertes Verhalten aufweisen. – Galik

+0

@Galik, stimmt. Aber diese Funktion wird zwangsläufig den Laufzeitfehler erhöhen. Versuchen Sie, verschiedene Iteratoren an "vector" zu übergeben und zu sehen, dass es gut handhabt (zumindest in VC++) – Ajay

Antwort

6

Die Funktion nimmt nicht 2 vector s, aber 2 iterators, der Punkt, an einem bestimmten Ort innerhalb eines vector. In diesem Fall das erste und ein vorletztes Element. Dies ist ein normales C++ - Idiom. (Beachten Sie, dass die Iteratoren möglicherweise tatsächlich einen Teilbereich eines existierenden vector anzeigen, muss nicht wirklich das Ganze sein).

Daher ist der Unterschied die Gesamtzahl der Elemente in der vector. Normalerweise würde man eine Schleife haben, die jedes Element behandelt, und First inkrementieren, bis es Last erreicht.

1|2|3|4|5| 
^First ^Last 

Beachten Sie, dass Last nicht 5 nicht zeigen, aber man daran vorbei. Last ist kein gültiges Element der vector, sondern ein Sentinel, das angibt, wann die Schleife beendet werden soll.

In diesem Fall , da Sie First 5-mal zu erhöhen, würden Last zu treffen.

Die Referenzdokumentation ist normalerweise nicht der beste Ort, um die Sprache zu lernen. Wir haben die book list.

Ihre Links:

  • isocpp.org: Über den Standardisierungsprozess und Ausschuss, hier nicht viel Dokumentation verwendeten Sprache.

  • cplusplus.com: eine nicht offizielle Referenzdokumentation Website. In der Vergangenheit war es nicht sehr gut, Fehler zu beheben.So viele Leute bevorzugen:

  • cppreference.com: ein Community-verwaltetes Wiki der Referenzdokumentation.

Es gibt keine „offizielle“ Referenzdokumentation andere als der Standard, ein Entwurf von denen auf isocpp.org gefunden werden kann, aber wirklich nicht versuchen, das zu lesen, ist es Experten-only, richtet bei Compiler-Implementierern. Ich werde nicht einmal darauf verlinken.

Um ehrlich zu sein, ich habe Mühe, eine wirklich gute Anfänger Tutorial online zu finden.

+1

Streng genommen wissen wir nicht, dass diese beiden Iteratoren auf das erste und letzte Element des Vektors zeigen, nur auf das sie zeigen ein Anfangs- und Endteil des Vektors. Ihr Unterschied ist die Anzahl der Elemente, die zwischen diesen beiden Punkten liegen. – Galik