国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

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

來源:懂視網 責編:小采 時間:2020-11-09 16:05:40
文檔

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

Cocos2d-x3.0中容器介紹(cocos2d::Vector):v3.0加入 定義在COCOS2DX_ROOT/cocos/base的CCVector.h頭文件中。 templateclass CC_DLL Vector; cocos2d::Vector是一個封裝好的能動態增長順序訪問的容器。 cocos2d::Vector中的元素是按序存取的,它的低層實現數據結構是標準模版庫
推薦度:
導讀Cocos2d-x3.0中容器介紹(cocos2d::Vector):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中的元素是按序存取的,它的低層實現數據結構是標準模版庫中的標準順序容

  • 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類只包含一個成員數據:

    std::vector _data;

    _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的源碼和壓縮包里附帶的例子。

    下面是一些簡單的例子:

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

    vec1.clear();//remove all elements log("The size of pVec1 is %zd",vec1.size());}

    輸出:

    Cocos2d: sprite tag =1Cocos2d: sprite tag =0Cocos2d: pVec0 is equal to pVec2
    Cocos2d: pVec1->capacity()==2; pVec1->size()==2Cocos2d:The index of sp0 in pVec2 is0Cocos2d:The size of pVec1 is0

    推薦做法

  • 考慮基于棧的cocos2d::Vector優先用于基于堆的
  • 當將cocos2d::Vector作為參數傳遞時,將它聲明成常量引用:const cocos2d::Vector&
  • 返回值是cocos2d::Vector時,直接返回值,這種情況下編譯器會優化成移動操作。
  • 不要用任何沒有繼承cocos2d::Ref的類型作為cocos2d::Vector的數據類型。
  • 聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

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

    Cocos2d-x3.0中容器介紹(cocos2d::Vector):v3.0加入 定義在COCOS2DX_ROOT/cocos/base的CCVector.h頭文件中。 templateclass CC_DLL Vector; cocos2d::Vector是一個封裝好的能動態增長順序訪問的容器。 cocos2d::Vector中的元素是按序存取的,它的低層實現數據結構是標準模版庫
    推薦度:
    標簽: 介紹 3.0 容器
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 亚洲一级二级三级 | 国产国语一级毛片中文 | 国产在线看不卡一区二区 | 欧美一区二区在线观看免费网站 | 亚洲国产一成人久久精品 | 国产国拍亚洲精品永久不卡 | 欧美com| 999成人精品视频在线 | 国内视频一区二区三区 | 91欧美精品 | 久操精品在线观看 | 国产成人精品久久 | 久久精品无码一区二区日韩av | 欧美日韩精品乱国产538 | 亚洲一二三区视频 | 伊人久久亚洲综合天堂 | 欧美孕妇性xxxⅹ精品hd | 国产精品视频久久久 | 亚洲十欧美十日韩十国产 | 91精品国产91久久久久久 | 91啪国自产在线高清观看 | 国产成人精品免费视 | 国产一区二区高清 | 国产在线精品观看一区 | 四虎影院永久免费观看 | 夜夜操美女 | 日韩免费视频在线观看 | 国产不卡一区二区三区免费视 | 天堂va欧美ⅴa亚洲va一国产 | 一级毛片在线看在线播放 | 精品国产欧美一区二区 | 日韩在线欧美高清一区 | 国产91精品久久久久999 | 精品国产欧美一区二区三区成人 | 一本久久道 | 国产精美视频 | 国产精品一区欧美日韩制服 | 亚洲精品一二区 | 97久久精品午夜一区二区 | 永久在线毛片免费观看 | 欧美日韩国产成人精品 |