程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 當C++遇到IOS應用開發之---List集合

當C++遇到IOS應用開發之---List集合

編輯:C++入門知識

    在Object-c中,數組使用NSArray和NSMutableArray(可變長數組)。使用語法如下:
[cpp] 
NSArray *array = [[NSArray alloc] initWithObjects:@"One",@"Two",@"Three",@"Four",nil]; 


      取數組元素的方法:
[html] 
[array objectAtIndex:2]); 

      因為數組在開發中會被頻繁使用,且objectAtIndex的寫法看著過於繁復,遠不如array[2]這種直觀。所以我將C++中的vector類進行了封裝,並增加一些新的功能:www.2cto.com

[cpp] 
#include <iostream> 
#include <vector> 
 
using namespace std; 
using namespace std::tr1; 
template<typename T, typename _Alloc = std::allocator<T> > 
class  List: public vector<T, _Alloc> 

private: 
    typedef typename std::vector<T>::iterator list_it; 
    
    list_it _it; 
 
public: 
    List(){} 
    
    List(NSArray *array){ 
        copyFromArray(array); 
    } 
    
       
    List(string *array){ 
        copyFromArray(array); 
    } 
    
    List(int *array){ 
        copyFromArray(array); 
    } 
    
    ~List() 
    { 
        std::cout<<"list destroy!"<<endl; 
    } 
    
    List& add(const T t){ 
        this->push_back(t); 
        return (*this); 
    } 
    
    void clear(){ 
        //this->clear(); 
        this->erase(this->begin(), this->end()); 
    } 
    
 
    BOOL contains(const T t){ 
        return indexOf(t) >= 0; 
    } 
    
 
    int indexOf(const T t){ 
        list_it it = std::find(this->begin(),this->end() , t ) ; 
        if(it != this->end()) 
            return it - this->begin(); 
        return -1 ; 
    } 
 
    void insert(int index,  const T t) 
    { 
        this->insert(this.begin() + index, 1, t); 
    } 
        
 
    void remove(const T t) 
    { 
        int pos = indexOf(t); 
        if (pos >= 0) 
            this->removeAt(pos); 
    } 
 
    void removeAt(int index) 
    { 
        if (this->size() > index){ 
            this->erase(this->begin() + index, this->begin() + index + 1); 
        } 
    } 
 
    int count() 
    { 
        return this->size(); 
    } 
 
    void copyFrom(List<T> list) 
    { 
         this->assign(list.begin(), list.end()); 
    } 
    
    void copyFromArray(NSArray *array){ 
         for(int i = 0; i< [array count]; i++){ 
             T t = (T)[array objectAtIndex:i]; 
             this->push_back(t); 
         } 
    } 
    
    void copyFromArray(string* array){ 
        for(int i = 0; i< array->length(); i++){ 
            T t = (T)array[i]; 
            this->push_back(t); 
        } 
    } 
    
    void copyFromArray(int* array){ 
        for(int i = 0; i<(sizeof(array)/sizeof(int)); i++){ 
            T t = (T)array[i]; 
            this->push_back(t); 
            //this->vector<T>::push_back(new T);//usage:用父類方法 或 static_cast<vector<T>*>(this)->push_back(T); 
        } 
    } 
}; 

 

用法如下

    實例化對象並添加數據:
[cpp] 
List<NSString*> list; 
list.add(@"1"); 
list.add(@"2代震軍"); 
list.add(@"333").add(@"44444").add(@"5"); 


    或用下面方式:
[cpp]
NSArray *array = [[NSArray alloc] initWithObjects: 
                  @"One",@"Two",@"Three",@"Four",nil]; 
List<NSString*> list1(array); 


    判斷是否存在某數據:
[cpp] 
NSString *del = @"44444"; 
bool iscontains = list.contains(del); 


    刪除數據:
[cpp] 
list.removeAt(2); 
list.remove(del); 


    遍歷:
[cpp] 
for(List<NSString*>::iterator it = list.begin() ;it != list.end() ; it++) 
    cout << [(*it) UTF8String ]<<" " ; 


    或使用foreach:
[cpp] 
__block NSString* str; 
for_each(list.begin(), list.end(), ^(NSString *value){ 
    str = value; 
    std::cout<<[value UTF8String]<<endl; 
}); 


    獲取指定索引記錄:
[cpp] 
NSString * result = list[0]; 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved