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