___ qstntxt ___

In Java gibt es eine nette Bibliotheksklasse java.util.Stack, die Push- und Pop-Methoden implementiert. Gibt es in Ziel C etwas Ähnliches?

Ich habe nur MutableArray gefunden. Es scheint komisch, dass ich so ein grundlegendes Ding wie einen Stapel implementieren muss, es muss etwas wie "NSStack", "NSQueue" und andere ähnliche Sachen geben.

    
___ answer11221979 ___

soweit ich weiß, gibt es nichts wie stack und queue im sdk.
Es gibt ein Beispiel für die Implementierung der Warteschlange hier .

    
___ tag123objectivec ___ Dieses Tag sollte nur bei Fragen verwendet werden, die sich auf Objective-C-Funktionen beziehen oder von Code in der Sprache abhängen. Die Tags [Kakao] und [Kakao-Touch] sollten verwendet werden, um nach Frameworks oder Klassen von Apple zu fragen. Verwenden Sie die verwandten Tags [ios], [macos], [apple-watch] und [tvos] für Probleme, die für diese Plattformen spezifisch sind. ___ tag123nsmutablearray ___ NSMutableArray repräsentiert ein modifizierbares (veränderbares) Array-Objekt für Cocoa und Cocoa Touch. Es ist verfügbar in OS X v10.0 und höher ___ answer11223120 ___

Niemand sollte es vergessen Objective-C bietet eine ziemlich schöne Variante: Objective-C ++. Und die C ++ - Standardbibliothek bietet die Datenstrukturen, die Sie brauchen, getestet, debuggt, stabil und so schnell wie möglich. Am besten, sie arbeiten perfekt mit ARC. Bestest, Sie können sogar zwischen %code% oder %code% Zeigern wählen, wenn Sie es fühlen.

Schauen Sie sich %code% und %code% an.

Das heißt, %code% funktioniert perfekt für Stacks: %code% , %code% und %code% werden den Job mit guter Leistung gut machen.

C ++ kann ausführlich sein. Schrecklich ausführlich. Aber es hat auch eine gewisse Eleganz hier und da und einige sehr mächtige Konstrukte. Einige Teile der Standardbibliothek glänzen wirklich, und die Datenstrukturen gehören zu den Perlen, wenn die Alien-Syntax beherrscht wird. Es kann trotzdem mit ein paar typedefs versteckt werden.

    
___ answer27750785 ___

Sie (wie ich) müssen sich vielleicht Sorgen machen, dass die Verwendung von NSMutableArray aus der Warteschlange entfernt wird, weil Sie das erste Objekt im NSMutableArray entfernen müssen, und das Entfernen bewirkt eine Verschiebung aller Objekte im Array. Das ist jedoch nicht notwendig, basierend auf dem Test, den ich hier gemacht habe: Für ein NSMutableArray, das 100000 Objekte enthält, entferne alle Objekte, indem du kontinuierlich das erste entfernst Das Objekt ist 100 ms langsamer als das fortlaufende Entfernen des letzten Objekts. Ich habe auch verglichen, ein NSMutableArray mit zwei NSMutableArrays zu verwenden. Obwohl es möglich ist, das Entfernen des ersten Objekts durch Verwendung von zwei NSMutableArrays, die als zwei Stapel verwendet werden, zu vermeiden, ist die Double-Stack-Lösung tatsächlich langsamer.

    
___ tag123stack ___ Ein Stapel ist ein LIFO-abstrakter Datentyp und eine letzte Datenstruktur. Eine häufige Verwendung von Stapeln besteht darin, Unterroutinenargumente zu speichern und Adressen zurückzugeben. ___ answer11221959 ___

Ich habe eine Stack-Implementierung hier . Es verwendet %code% , um die schmutzige Arbeit zu erledigen, die wirklich nicht so schlecht ist. Aber in die Foundation ist nichts eingebaut.

    
___

7

In Java gibt es eine nette Bibliotheksklasse java.util.Stack, die Push- und Pop-Methoden implementiert. Gibt es in Ziel C etwas Ähnliches?

Ich habe nur MutableArray gefunden. Es scheint komisch, dass ich so ein grundlegendes Ding wie einen Stapel implementieren muss, es muss etwas wie "NSStack", "NSQueue" und andere ähnliche Sachen geben.

    
iseeall 27.06.2012, 08:08
quelle

4 Antworten

9

Ich habe eine Stack-Implementierung hier . Es verwendet NSMutableArray , um die schmutzige Arbeit zu erledigen, die wirklich nicht so schlecht ist. Aber in die Foundation ist nichts eingebaut.

    
mattjgalloway 27.06.2012, 08:12
quelle
18

Niemand sollte es vergessen Objective-C bietet eine ziemlich schöne Variante: Objective-C ++. Und die C ++ - Standardbibliothek bietet die Datenstrukturen, die Sie brauchen, getestet, debuggt, stabil und so schnell wie möglich. Am besten, sie arbeiten perfekt mit ARC. Bestest, Sie können sogar zwischen __weak oder __strong Zeigern wählen, wenn Sie es fühlen.

Schauen Sie sich <queue> und <stack> an.

Das heißt, NSMutableArray funktioniert perfekt für Stacks: -addObject: , -lastObject und -removeLastObject werden den Job mit guter Leistung gut machen.

C ++ kann ausführlich sein. Schrecklich ausführlich. Aber es hat auch eine gewisse Eleganz hier und da und einige sehr mächtige Konstrukte. Einige Teile der Standardbibliothek glänzen wirklich, und die Datenstrukturen gehören zu den Perlen, wenn die Alien-Syntax beherrscht wird. Es kann trotzdem mit ein paar typedefs versteckt werden.

    
quelle
1

soweit ich weiß, gibt es nichts wie stack und queue im sdk.
Es gibt ein Beispiel für die Implementierung der Warteschlange hier .

    
Redlil 27.06.2012 08:13
quelle
1

Sie (wie ich) müssen sich vielleicht Sorgen machen, dass die Verwendung von NSMutableArray aus der Warteschlange entfernt wird, weil Sie das erste Objekt im NSMutableArray entfernen müssen, und das Entfernen bewirkt eine Verschiebung aller Objekte im Array. Das ist jedoch nicht notwendig, basierend auf dem Test, den ich hier gemacht habe: Für ein NSMutableArray, das 100000 Objekte enthält, entferne alle Objekte, indem du kontinuierlich das erste entfernst Das Objekt ist 100 ms langsamer als das fortlaufende Entfernen des letzten Objekts. Ich habe auch verglichen, ein NSMutableArray mit zwei NSMutableArrays zu verwenden. Obwohl es möglich ist, das Entfernen des ersten Objekts durch Verwendung von zwei NSMutableArrays, die als zwei Stapel verwendet werden, zu vermeiden, ist die Double-Stack-Lösung tatsächlich langsamer.

    
jack 03.01.2015 01:20
quelle