惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
Netflix TechBlog - Medium
Microsoft Azure Blog
Microsoft Azure Blog
罗磊的独立博客
博客园 - 三生石上(FineUI控件)
aimingoo的专栏
aimingoo的专栏
B
Blog RSS Feed
V
Visual Studio Blog
P
Proofpoint News Feed
云风的 BLOG
云风的 BLOG
博客园 - 【当耐特】
大猫的无限游戏
大猫的无限游戏
Application and Cybersecurity Blog
Application and Cybersecurity Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
The Cloudflare Blog
B
Blog
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Apple Machine Learning Research
Apple Machine Learning Research
M
MIT News - Artificial intelligence
Know Your Adversary
Know Your Adversary
I
InfoQ
T
The Exploit Database - CXSecurity.com
V
Vulnerabilities – Threatpost
C
Cisco Blogs
Spread Privacy
Spread Privacy
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Palo Alto Networks Blog
Simon Willison's Weblog
Simon Willison's Weblog
月光博客
月光博客
博客园 - Franky
Project Zero
Project Zero
G
Google Developers Blog
S
SegmentFault 最新的问题
博客园 - 聂微东
P
Privacy & Cybersecurity Law Blog
The GitHub Blog
The GitHub Blog
阮一峰的网络日志
阮一峰的网络日志
P
Privacy International News Feed
T
Threat Research - Cisco Blogs
S
Schneier on Security
Microsoft Security Blog
Microsoft Security Blog
G
GRAHAM CLULEY
S
Security @ Cisco Blogs
Martin Fowler
Martin Fowler
A
Arctic Wolf
T
Tenable Blog
L
LINUX DO - 最新话题
TaoSecurity Blog
TaoSecurity Blog
Hugging Face - Blog
Hugging Face - Blog
有赞技术团队
有赞技术团队
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com

博客园 - 代震军

重磅发布码农界的第一张吉他专辑小样 HRPlugin For Xcode发布(附源码地址) 当C++遇到iOS应用开发---LRUCache缓存 当C++遇到iOS应用开发---Dict集合 当C++遇到iOS应用开发---字符串处理 当C++遇到iOS应用开发---SQLITE篇 开源ImageFilter库For IOS源码发布 开源ImageFilter库v0.4:新增26种图片效果 开源ImageFilter库v0.3:新增22种图片效果 开源ImageFilter库v0.2:新增7类滤镜,支持12种图片效果 Android, WindowsPhone7, IOS ,vc2010平台40多套图片滤镜开源 Discuz!NT中的LLServer架构设计 LLServer1.0及C#客户端正式发布并开源 Mongodb源码分析--Replication之OpLog Mongodb源码分析--Replication之主从模式--Slave 这样的“牛”人最好别碰上 Mongodb源码分析--Replication之主从模式--Master Mongodb源码分析--链接池(ConnPool) Mongodb源码分析--Mongos之分布式锁
当C++遇到iOS应用开发之---List集合
代震军 · 2012-11-07 · via 博客园 - 代震军

      在Object-c中,数组使用NSArray和NSMutableArray(可变长数组)。使用语法如下:
     

NSArray *array = [[NSArray alloc] initWithObjects:@"One",@"Two",@"Three",@"Four",nil];

      取数组元素的方法:

   [array objectAtIndex:2]);

      因为数组在开发中会被频繁使用,且objectAtIndex的写法看着过于繁复,远不如array[2]这种直观。所以我将C++中的vector类进行了封装,并增加一些新的功能:

#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);
        }
    }
};

用法如下

    实例化对象并添加数据:

    List<NSString*> list;
    list.add(@"1");
    list.add(@"2代震军");
    list.add(@"333").add(@"44444").add(@"5");

    或用下面方式:

    NSArray *array = [[NSArray alloc] initWithObjects:
                      @"One",@"Two",@"Three",@"Four",nil];
    List<NSString*> list1(array);

    判断是否存在某数据:

    NSString *del = @"44444";
    bool iscontains = list.contains(del);

    删除数据:

    list.removeAt(2);
    list.remove(del);

    遍历:

    

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

    或使用foreach:

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

    获取指定索引记录:

    NSString * result = list[0];

    代码比较简单,呵呵

    好了,今天的内容就先到这里了。

    原文链接:http://www.cnblogs.com/daizhj/archive/2012/11/07/2758843.html

    作者: daizhj, 代震军 
    微博: http://weibo.com/daizhj
    Tags:ios, c++, NSArray, NSMutableArray, vector