Heim Datenbank MySQL-Tutorial Cocos2d-x3.0中容器介绍(cocos2d::Vector)

Cocos2d-x3.0中容器介绍(cocos2d::Vector)

Jun 07, 2016 pm 02:59 PM
介绍 容器

v3.0加入 定义在”COCOS2DX_ROOT/cocos/base”的”CCVector.h”头文件中。 templateclass CC_DLL Vector; cocos2d::Vector是一个封装好的能动态增长顺序访问的容器。 cocos2d::Vector中的元素是按序存取的,它的低层实现数据结构是标准模版库中的标准顺序容

 

  • v3.0加入

定义在”COCOS2DX_ROOT/cocos/base”的”CCVector.h”头文件中。


templateclass CC_DLL Vector;


cocos2d::Vector是一个封装好的能动态增长顺序访问的容器。

cocos2d::Vector中的元素是按序存取的,它的低层实现数据结构是标准模版库中的标准顺序容器std::vector。

在cocos2d-x v3.0 beta之前,使用的是另外一个顺序访问容器cocos2d::CCArray,不过它将会被废弃。

设计者们将cocos2d::Vector设计为cocos2d::CCArray的替代品,所以建议优先考虑使用cocos2d::Vector。

cocos2d::Vector的一些操作的时间复杂度如下:

  • 随机访问,O(1)
  • 将元素插入到尾部或者删除尾部的元素,O(1)
  • 随机插入或删除, O(n)

模版参数

T – 元素类型

  • T的类型必须是继承自cocos2d::Ref类型的指针。因为已经将cocos2d-x的内存管理模型集成到了cocos2d::Vector中,所以类型参数不能是其他的类型包括基本类型。

内存管理

cocos2d::Vector类只包含一个成员数据:

<span>std</span><span>::</span><span>vector</span><span><span>T</span><span>></span><span> _data</span><span>;</span></span>
Nach dem Login kopieren

_data的内存管理是由编译器自动处理的,如果声明了一个cocos2d::Vector类型,就不必费心去释放内存。

注意:使用现代的c++,本地存储对象比堆存储对象好。所以请不要用new操作来申请cocos2d::Vector的堆对象,请使用栈对象。

如果真心想动态分配堆cocos2d::Vector,请将原始指针用智能指针来覆盖。

警告:cocos2d::Vector并不是cocos2d::Ref的子类,所以不要像使用其他cocos2d类一样来用retain/release和引用计数内存管理。

基本用法

作者们用std::vector的基本操作加上cocos2d-x的内存管理规则来覆盖该模版原先的普通操作。

所以pushBack()操作将会保留传递过来的参数,而popBack()则会释放掉容器中最后的一个元素。

当你使用这些操作的时候,你需要特别注意这些受托管的对象,对于新手来说,这往往是陷阱。

警告:cocos2d::Vector并没有重载[]操作,所以不能直接用下标[i]来获取第i位元素。

cocos2d::Vector提供了不同类型的迭代器,所以我们可以受益于c++的标准函数库,我们可以使用大量标准泛型算法和for_each循环。

除了std::vector容器的操作之外,开发者们还加入许多标准算法诸如:std::find, std::reverse和std::swap,这些算法可以简化很多通用的操作。

要了解更多的api用例,可以参考cocos2d-x 3.0的源码和压缩包里附带的例子。

下面是一些简单的例子:

<span>//create Vector<sprite> with default size and add a sprite into it</sprite></span><span>auto</span><span> sp0 </span><span>=</span><span>Sprite</span><span>::</span><span>create</span><span>();</span><span>
sp0</span><span>-></span><span>setTag</span><span>(</span><span>0</span><span>);</span><span>//here we use shared_ptr just as a demo. in your code, please use stack object instead</span><span>
std</span><span>::</span><span>shared_ptr</span><span><span>Vector</span><span><span>Sprite</span><span>*>></span><span>  vec0 </span><span>=</span><span> std</span><span>::</span><span>make_shared</span><span><span>Vector</span><span><span>Sprite</span><span>*>>();</span><span>//default constructor</span><span>
vec0</span><span>-></span><span>pushBack</span><span>(</span><span>sp0</span><span>);</span><span>//create a Vector<ref> with a capacity of 5 and add a sprite into it</ref></span><span>auto</span><span> sp1 </span><span>=</span><span>Sprite</span><span>::</span><span>create</span><span>();</span><span>
sp1</span><span>-></span><span>setTag</span><span>(</span><span>1</span><span>);</span><span>//initialize a vector with a capacity</span><span>Vector</span><span><span>Sprite</span><span>*></span><span>  vec1</span><span>(</span><span>5</span><span>);</span><span>//insert a certain object at a certain index</span><span>
vec1</span><span>.</span><span>insert</span><span>(</span><span>0</span><span>,</span><span> sp1</span><span>);</span><span>//we can also add a whole vector</span><span>
vec1</span><span>.</span><span>pushBack</span><span>(*</span><span>vec0</span><span>);</span><span>for</span><span>(</span><span>auto</span><span> sp </span><span>:</span><span> vec1</span><span>)</span><span>{</span><span>
    log</span><span>(</span><span>"sprite tag = %d"</span><span>,</span><span> sp</span><span>-></span><span>getTag</span><span>());</span><span>}</span><span>Vector</span><span><span>Sprite</span><span>*></span><span> vec2</span><span>(*</span><span>vec0</span><span>);</span><span>if</span><span>(</span><span>vec0</span><span>-></span><span>equals</span><span>(</span><span>vec2</span><span>))</span><span>{</span><span>//returns true if the two vectors are equal</span><span>
    log</span><span>(</span><span>"pVec0 is equal to pVec2"</span><span>);</span><span>}</span><span>if</span><span>(!</span><span>vec1</span><span>.</span><span>empty</span><span>())</span><span>{</span><span>//whether the Vector is empty</span><span>//get the capacity and size of the Vector, noted that the capacity is not necessarily equal to the vector size.</span><span>if</span><span>(</span><span>vec1</span><span>.</span><span>capacity</span><span>()</span><span>==</span><span> vec1</span><span>.</span><span>size</span><span>())</span><span>{</span><span>
        log</span><span>(</span><span>"pVec1->capacity()==pVec1->size()"</span><span>);</span><span>}</span><span>else</span><span>{</span><span>
        vec1</span><span>.</span><span>shrinkToFit</span><span>();</span><span>//shrinks the vector so the memory footprint corresponds with the number of items</span><span>
        log</span><span>(</span><span>"pVec1->capacity()==%zd; pVec1->size()==%zd"</span><span>,</span><span>vec1</span><span>.</span><span>capacity</span><span>(),</span><span>vec1</span><span>.</span><span>size</span><span>());</span><span>}</span><span>//pVec1->swap(0, 1);  //swap two elements in Vector by their index</span><span>
    vec1</span><span>.</span><span>swap</span><span>(</span><span>vec1</span><span>.</span><span>front</span><span>(),</span><span> vec1</span><span>.</span><span>back</span><span>());</span><span>//swap two elements in Vector by their value</span><span>if</span><span>(</span><span>vec2</span><span>.</span><span>contains</span><span>(</span><span>sp0</span><span>))</span><span>{</span><span>//returns a Boolean value that indicates whether object is present in vector</span><span>
        log</span><span>(</span><span>"The index of sp0 in pVec2 is %zd"</span><span>,</span><span>vec2</span><span>.</span><span>getIndex</span><span>(</span><span>sp0</span><span>));</span><span>}</span><span>//remove the element from the Vector</span><span>
    vec1</span><span>.</span><span>erase</span><span>(</span><span>vec1</span><span>.</span><span>find</span><span>(</span><span>sp0</span><span>));</span><span>//pVec1->erase(1);</span><span>//pVec1->eraseObject(sp0,true);</span><span>//pVec1->popBack();</span><span>

vec1</span><span>.</span><span>clear</span><span>();</span><span>//remove all elements</span><span>
log</span><span>(</span><span>"The size of pVec1 is %zd"</span><span>,</span><span>vec1</span><span>.</span><span>size</span><span>());</span><span>}</span></span></span></span></span></span></span>
Nach dem Login kopieren

输出:

<span>Cocos2d</span><span>:</span><span> sprite tag </span><span>=</span><span>1</span><span>Cocos2d</span><span>:</span><span> sprite tag </span><span>=</span><span>0</span><span>Cocos2d</span><span>:</span><span> pVec0 </span><span>is</span><span> equal to pVec2
</span><span>Cocos2d</span><span>:</span><span> pVec1</span><span>-></span><span>capacity</span><span>()==</span><span>2</span><span>;</span><span> pVec1</span><span>-></span><span>size</span><span>()==</span><span>2</span><span>Cocos2d</span><span>:</span><span>The</span><span> index of sp0 </span><span>in</span><span> pVec2 </span><span>is</span><span>0</span><span>Cocos2d</span><span>:</span><span>The</span><span> size of pVec1 </span><span>is</span><span>0</span>
Nach dem Login kopieren

推荐做法

  • 考虑基于栈的cocos2d::Vector优先用于基于堆的
  • 当将cocos2d::Vector作为参数传递时,将它声明成常量引用:const cocos2d::Vector&
  • 返回值是cocos2d::Vector时,直接返回值,这种情况下编译器会优化成移动操作。
  • 不要用任何没有继承cocos2d::Ref的类型作为cocos2d::Vector的数据类型。
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Detaillierte Einführung in Wapi Detaillierte Einführung in Wapi Jan 07, 2024 pm 09:14 PM

Benutzer haben möglicherweise den Begriff Wapi bei der Nutzung des Internets gesehen, aber einige Leute wissen definitiv nicht, was Wapi ist. Im Folgenden finden Sie eine detaillierte Einführung, um denjenigen, die es nicht wissen, das Verständnis zu erleichtern. Was ist Wapi: Antwort: Wapi ist die Infrastruktur für WLAN-Authentifizierung und Vertraulichkeit. Dies entspricht Funktionen wie Infrarot und Bluetooth, die im Allgemeinen in der Nähe von Orten wie Bürogebäuden verfügbar sind. Im Grunde sind sie Eigentum einer kleinen Abteilung, sodass der Umfang dieser Funktion nur wenige Kilometer beträgt. Verwandte Einführung in Wapi: 1. Wapi ist ein Übertragungsprotokoll im WLAN. 2. Diese Technologie kann die Probleme der Schmalbandkommunikation vermeiden und eine bessere Kommunikation ermöglichen. 3. Zur Übertragung des Signals ist nur ein Code erforderlich.

Detaillierte Erklärung, ob Win11 das PUBG-Spiel ausführen kann Detaillierte Erklärung, ob Win11 das PUBG-Spiel ausführen kann Jan 06, 2024 pm 07:17 PM

Pubg, auch bekannt als PlayerUnknown's Battlegrounds, ist ein sehr klassisches Battle-Royale-Shooter-Spiel, das seit seiner Popularität im Jahr 2016 viele Spieler angezogen hat. Nach der kürzlichen Einführung des Win11-Systems möchten viele Spieler es auf Win11 spielen. Folgen wir dem Editor, um zu sehen, ob Win11 Pubg spielen kann. Kann Win11 Pubg spielen? Antwort: Win11 kann Pubg spielen. 1. Zu Beginn von Win11 wurden viele Spieler von Pubg ausgeschlossen, da Win11 TPM aktivieren musste. 2. Basierend auf dem Feedback der Spieler hat Blue Hole dieses Problem jedoch gelöst, und jetzt können Sie Pubg unter Win11 normal spielen. 3. Wenn Sie eine Kneipe treffen

Einführung in Python-Funktionen: Einführung und Beispiele der Exec-Funktion Einführung in Python-Funktionen: Einführung und Beispiele der Exec-Funktion Nov 03, 2023 pm 02:09 PM

Einführung in Python-Funktionen: Einführung und Beispiele der Exec-Funktion Einführung: In Python ist Exec eine integrierte Funktion, die zum Ausführen von Python-Code verwendet wird, der in einer Zeichenfolge oder Datei gespeichert ist. Die exec-Funktion bietet eine Möglichkeit, Code dynamisch auszuführen, sodass das Programm während der Laufzeit nach Bedarf Code generieren, ändern und ausführen kann. In diesem Artikel wird die Verwendung der Exec-Funktion vorgestellt und einige praktische Codebeispiele gegeben. So verwenden Sie die Exec-Funktion: Die grundlegende Syntax der Exec-Funktion lautet wie folgt: exec

Detaillierte Einführung, ob der i5-Prozessor Win11 installieren kann Detaillierte Einführung, ob der i5-Prozessor Win11 installieren kann Dec 27, 2023 pm 05:03 PM

i5 ist eine Prozessorserie von Intel. Es gibt verschiedene Versionen des i5 der 11. Generation, und jede Generation hat eine unterschiedliche Leistung. Ob der i5-Prozessor win11 installieren kann, hängt daher davon ab, um welche Generation des Prozessors es sich handelt. Folgen wir dem Editor, um mehr darüber zu erfahren. Kann der i5-Prozessor mit Win11 installiert werden: Antwort: Der i5-Prozessor kann mit Win11 installiert werden. 1. Die Prozessoren der achten Generation und nachfolgender i51, der achten Generation und nachfolgender i5-Prozessoren können die Mindestkonfigurationsanforderungen von Microsoft erfüllen. 2. Daher müssen wir nur die Microsoft-Website aufrufen und einen „Win11-Installationsassistenten“ herunterladen. 3. Nachdem der Download abgeschlossen ist, führen Sie den Installationsassistenten aus und befolgen Sie die Anweisungen zur Installation von Win11. 2. i51 vor der achten Generation und nach der achten Generation

So verwenden Sie Docker für die Wiederherstellung nach Containerfehlern und den automatischen Neustart So verwenden Sie Docker für die Wiederherstellung nach Containerfehlern und den automatischen Neustart Nov 07, 2023 pm 04:28 PM

Als leichtgewichtige Virtualisierungsplattform auf Basis der Containertechnologie wird Docker in verschiedenen Szenarien häufig eingesetzt. In einer Produktionsumgebung sind hohe Verfügbarkeit und automatische Fehlerbehebung von Containern von entscheidender Bedeutung. In diesem Artikel wird die Verwendung von Docker für die Wiederherstellung nach Containerfehlern und den automatischen Neustart vorgestellt, einschließlich spezifischer Codebeispiele. 1. Konfiguration des automatischen Container-Neustarts In Docker kann die automatische Neustartfunktion des Containers aktiviert werden, indem beim Ausführen des Containers die Option --restart verwendet wird. Gängige Optionen sind: Nein: Nicht automatisch neu starten. still

AtomHub, das von Huawei, Inspur und anderen Einheiten gemeinsam geschaffene Open-Source-Containerspiegelungszentrum, gab bekannt, dass es offiziell für öffentliche Tests geöffnet ist und inländische Dienste stabil herunterladen kann. AtomHub, das von Huawei, Inspur und anderen Einheiten gemeinsam geschaffene Open-Source-Containerspiegelungszentrum, gab bekannt, dass es offiziell für öffentliche Tests geöffnet ist und inländische Dienste stabil herunterladen kann. Jan 02, 2024 pm 03:54 PM

Aus den offiziellen Nachrichten von Huawei geht hervor, dass die Open Atomic Developer Conference mit dem Thema „Alles für Entwickler“ zwei Tage lang, vom 16. bis 17. Dezember, in Wuxi stattfand. Die Konferenz wurde von der Open Atomic Open Source Foundation, Huawei und geleitet Inspur, DaoCloud, Xieyun, Qingyun, Hurricane Engine sowie die OpenSDV Open Source Alliance, die openEuler-Community, die OpenCloudOS-Community und andere Mitgliedseinheiten, das AtomHub Trusted Mirror Center ist offiziell für öffentliche Tests geöffnet. AtomHub folgt den Konzepten der Co-Konstruktion, Co-Governance und Sharing und zielt darauf ab, Open-Source-Organisationen und Entwicklern ein neutrales, offenes und gemeinsam aufgebautes, vertrauenswürdiges Open-Source-Container-Spiegelzentrum zur Verfügung zu stellen. Angesichts der Instabilität und Unkontrollierbarkeit von Image-Warehouses wie DockerHub und anderen

So installieren Sie Redhat Podman unter Windows 10 oder 11 über CMD So installieren Sie Redhat Podman unter Windows 10 oder 11 über CMD Oct 02, 2023 pm 09:33 PM

Installieren Sie RedHatPodman unter Windows 11 oder 10. Befolgen Sie diese Schritte, um RedHatPodman über die Eingabeaufforderung oder Powershell auf Ihrem Windows-Computer zu installieren: Schritt 1: Überprüfen Sie die Systemanforderungen. Zunächst müssen Sie sicherstellen, dass Ihr Windows-System mit den neuesten Updates ausgeführt wird, damit dies möglich ist Erfüllen Sie die Anforderungen zum Ausführen von Podman. Sie sollten Windows 11 oder Windows 10 Version 1709 (Build 16299) oder höher verwenden und Sie müssen das Windows-Subsystem für Linux 2 (WSL2) und VM-Funktionen aktivieren. Wenn diese noch nicht aktiviert sind, können Sie den zweistufigen Befehl verwenden führt dies aus

Wir stellen die neueste Sound-Tuning-Methode für Win 11 vor Wir stellen die neueste Sound-Tuning-Methode für Win 11 vor Jan 08, 2024 pm 06:41 PM

Nach dem Update auf das neueste Win11 stellen viele Benutzer fest, dass sich der Sound ihres Systems leicht verändert hat, sie wissen jedoch nicht, wie sie ihn anpassen können. Deshalb bietet Ihnen diese Website heute eine Einführung in die neueste Win11-Soundanpassungsmethode für Ihren Computer. Die Bedienung ist nicht schwer und die Auswahl ist vielfältig. Laden Sie sie herunter und probieren Sie sie aus. So passen Sie den Sound des neuesten Computersystems Windows 11 an 1. Klicken Sie zunächst mit der rechten Maustaste auf das Soundsymbol in der unteren rechten Ecke des Desktops und wählen Sie „Wiedergabeeinstellungen“. 2. Geben Sie dann die Einstellungen ein und klicken Sie in der Wiedergabeleiste auf „Lautsprecher“. 3. Klicken Sie anschließend unten rechts auf „Eigenschaften“. 4. Klicken Sie in den Eigenschaften auf die Optionsleiste „Erweitern“. 5. Wenn zu diesem Zeitpunkt das √ vor „Alle Soundeffekte deaktivieren“ aktiviert ist, brechen Sie den Vorgang ab. 6. Danach können Sie unten die Soundeffekte zum Einstellen auswählen und klicken

See all articles