纳金网

标题: C++ 数组增删改查的代码 [打印本页]

作者: 烟雨    时间: 2015-11-30 23:38
标题: C++ 数组增删改查的代码

  1. #ifndef __ArrayDemo__LWArray__
  2. #define __ArrayDemo__LWArray__

  3. #include <iostream>
  4. #include <strstream>

  5. template <typename T> struct LWArrayObject {
  6. public:
  7.     T data;
  8.     LWArrayObject <T> * next;
  9. };

  10. template <typename T> class LWArray {
  11. public:
  12.     int count;
  13. public:
  14.     void addObject(T t);
  15.     void insertObject(int index, T t);
  16.     void removeObject(int index);
  17.     void replaceObject(int index, T t);
  18.     T getObject(int index);
  19.     void clear();
  20.     T getFirstObject();
  21.     T getLastObject();
  22.     std::string toString();
  23. private:
  24.     LWArrayObject <T> * firstObject;
  25.     LWArrayObject <T> * lastObject;
  26. };

  27. template <typename T> void LWArray<T>::insertObject(int index, T t) {
  28.     LWArrayObject <T> * o = new LWArrayObject <T> ();
  29.     o -> data = t;
  30.     o -> next = nullptr;
  31.     LWArrayObject <T> * obj = firstObject;
  32.     LWArrayObject <T> * lastObj = nullptr;
  33.     if (index > 0) {
  34.         while (index > 0) {
  35.             lastObj = obj;
  36.             obj = obj -> next;
  37.             index--;
  38.         }
  39.         lastObj -> next = o;
  40.         o -> next = obj;
  41.     } else if (index == 0) {
  42.         firstObject = o;
  43.         o -> next = obj;
  44.     }
  45.     count++;
  46. }

  47. template <typename T> void LWArray<T>::clear() {
  48.     while (count > 0) {
  49.         removeObject(0);
  50.     }
  51. }

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

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

  58. template <typename T> T LWArray<T>::getObject(int index) {
  59.     LWArrayObject <T> * obj = firstObject;
  60.     while (index > 0) {
  61.         obj = obj -> next;
  62.         index--;
  63.     }
  64.     return obj -> data;
  65. }

  66. template <typename T> void LWArray<T>::replaceObject(int index, T t) {
  67.     LWArrayObject <T> * obj = firstObject;
  68.     while (index > 0) {
  69.         obj = obj -> next;
  70.         index--;
  71.     }
  72.     obj -> data = t;
  73. }

  74. template <typename T> void LWArray<T>::removeObject(int index) {
  75.     LWArrayObject <T> * obj = firstObject;
  76.     LWArrayObject <T> * lastObj = nullptr;
  77.     if (index > 0) {
  78.         while (index > 0) {
  79.             lastObj = obj;
  80.             obj = obj -> next;
  81.             index--;
  82.         }
  83.         lastObj -> next = obj -> next;
  84.     } else if (index == 0) {
  85.         firstObject = obj -> next;
  86.     }
  87.     count--;
  88.     delete obj;
  89.     obj = nullptr;
  90. }

  91. template <typename T> void LWArray<T>::addObject(T t) {
  92.     LWArrayObject <T> * obj = new LWArrayObject <T> ();
  93.     obj -> data = t;
  94.     obj -> next = nullptr;
  95.     if (firstObject == nullptr) {
  96.         firstObject = obj;
  97.     }
  98.     if (lastObject != nullptr) {
  99.         lastObject -> next = obj;
  100.     }
  101.     lastObject = obj;
  102.     count++;
  103. }

  104. template <typename T> std::string LWArray<T>::toString() {
  105.     std::strstream ss;
  106.     ss << "Array(" << count << ")=[";
  107.     LWArrayObject <T> * obj;
  108.     for (int i = 0;i < count;i++) {
  109.         if (i == 0) {
  110.             obj = firstObject;
  111.             ss << obj -> data;
  112.         } else {
  113.             obj = obj -> next;
  114.             ss << "," << obj -> data;
  115.         }
  116.     }
  117.     ss << "]";
  118.     std::string str;
  119.     ss >> str;
  120.     return str;
  121. }

  122. #endif
复制代码





欢迎光临 纳金网 (http://go.narkii.com/club/) Powered by Discuz! X2.5