查看: 1004|回复: 1
打印 上一主题 下一主题

[其他] C++ 数组增删改查

[复制链接]

711

主题

10

听众

5805

积分

高级设计师

Rank: 6Rank: 6

纳金币
2954
精华
3

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2015-7-31 00:50:10 |只看该作者 |倒序浏览
#ifndef __ArrayDemo__LWArray__
#define __ArrayDemo__LWArray__

#include <iostream>
#include <strstream>

template <typename T> struct LWArrayObject {
public:
    T data;
    LWArrayObject <T> * next;
};

template <typename T> class LWArray {
public:
    int count;
public:
    void addObject(T t);
    void insertObject(int index, T t);
    void removeObject(int index);
    void replaceObject(int index, T t);
    T getObject(int index);
    void clear();
    T getFirstObject();
    T getLastObject();
    std::string toString();
private:
    LWArrayObject <T> * firstObject;
    LWArrayObject <T> * lastObject;
};

template <typename T> void LWArray<T>::insertObject(int index, T t) {
    LWArrayObject <T> * o = new LWArrayObject <T> ();
    o -> data = t;
    o -> next = nullptr;
    LWArrayObject <T> * obj = firstObject;
    LWArrayObject <T> * lastObj = nullptr;
    if (index > 0) {
        while (index > 0) {
            lastObj = obj;
            obj = obj -> next;
            index--;
        }
        lastObj -> next = o;
        o -> next = obj;
    } else if (index == 0) {
        firstObject = o;
        o -> next = obj;
    }
    count++;
}

template <typename T> void LWArray<T>::clear() {
    while (count > 0) {
        removeObject(0);
    }
}

template <typename T> T LWArray<T>::getFirstObject() {
    return firstObject -> data;
}

template <typename T> T LWArray<T>::getLastObject() {
    return lastObject -> data;
}

template <typename T> T LWArray<T>::getObject(int index) {
    LWArrayObject <T> * obj = firstObject;
    while (index > 0) {
        obj = obj -> next;
        index--;
    }
    return obj -> data;
}

template <typename T> void LWArray<T>::replaceObject(int index, T t) {
    LWArrayObject <T> * obj = firstObject;
    while (index > 0) {
        obj = obj -> next;
        index--;
    }
    obj -> data = t;
}

template <typename T> void LWArray<T>::removeObject(int index) {
    LWArrayObject <T> * obj = firstObject;
    LWArrayObject <T> * lastObj = nullptr;
    if (index > 0) {
        while (index > 0) {
            lastObj = obj;
            obj = obj -> next;
            index--;
        }
        lastObj -> next = obj -> next;
    } else if (index == 0) {
        firstObject = obj -> next;
    }
    count--;
    delete obj;
    obj = nullptr;
}

template <typename T> void LWArray<T>::addObject(T t) {
    LWArrayObject <T> * obj = new LWArrayObject <T> ();
    obj -> data = t;
    obj -> next = nullptr;
    if (firstObject == nullptr) {
        firstObject = obj;
    }
    if (lastObject != nullptr) {
        lastObject -> next = obj;
    }
    lastObject = obj;
    count++;
}

template <typename T> std::string LWArray<T>::toString() {
    std::strstream ss;
    ss << "Array(" << count << ")=[";
    LWArrayObject <T> * obj;
    for (int i = 0;i < count;i++) {
        if (i == 0) {
            obj = firstObject;
            ss << obj -> data;
        } else {
            obj = obj -> next;
            ss << "," << obj -> data;
        }
    }
    ss << "]";
    std::string str;
    ss >> str;
    return str;
}

#endif
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-24 12:03 , Processed in 0.154926 second(s), 27 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部