#pragma once #include "system/base.hpp" #include "wobject/xobject.hpp" #include "wobject/xstring.hpp" template class xarray : public xobject { public: xarray(length_(0), capacity_(0),itemms(nullptr){ } public: xarray*push_back(T t) { sure_space(); items[length_] = t; ++length_; return this; } xarray* pop_back() { if (length() > 0) erase(length() - 1); return this; } xarray* erase(int index) { if (index < 0 || index > length_ - 1) { //throw("..."); return this; } //move data for (int i = index; i < length_ - 1; i++)items[i] = items[i + 1]; --length_; return this; } xarray* insert_before(int index, T t) { sure_space(); if (index < 0) { for (int i = 0; i < length_ - 1; i++)items[i] = items[i + 1]; items[0] = t; return this; } if (index >= length_) { items[length_] = t; ++length_; } return this; } xarray* insert_after(int index, T t) { return insert_before(index + 1, t); } T back() { if (length_) return items[length_ - 1]; return 0; } T front() { if (length_) return items[0]; return 0; } int length() { return length_; } T item(int index) { if (index >= 0 && index < length_) return items[index]; return 0; } int find(T t) { for (int i = 0; i < length_; i++) { if (items[i] == t) return i; } return -1; } private: bool sure_space() { if (length_ == capacity_) { if (!items) { items = new T[2]; capacity_ = 2; } else { capacity_ = capacity_ * 2; T* temp = new T[capacity_]; //¿ÉÒÔÓÅ»¯Îª¿½±´²Ù×÷ for (int i = 0; i < length_; ++i) { temp[i] = items[i]; } delete items; items = temp; } } return true; } private: T* items; int length_; int capacity_; };