六 陣列類的建立

2022-08-11 14:15:11 字數 3055 閱讀 2416

順序儲存結構的線性表存在著兩個方面的問題:

功能方面:陣列操作符的過載,線性表有可能被誤用為陣列使用

效率方面:在一些場合中,效率上是有隱患的

解決方案:當前的庫中沒有可以代替原生陣列的實現,所以有可能會被誤用,需要建立乙個陣列類代替原生陣列。

需求分析:建立陣列類代替原生陣列的使用

array設計要點:

array類的宣告

templateclass array : public object

template class array : public object

return ret;

}virtual bool get(int i, t& e)

return ret;

}virtual int length() const = 0;

// 陣列訪問操作符

t& operator (int i)

else

}t operator (int i) const

};

staticarray設計要點:類模板

template < typename t, int n >

class staticarray : public array;

template < typename t, int n >

class staticarray : public array

// 拷貝構造和賦值操作

staticarray(const staticarray& obj)

}staticarray& operator = (const staticarray& obj)

}return *this;

}int length() const

};

4、dynamicarray類模板建立

staticarray的物件,陣列的大小是明確指定的,建立動態陣列類模板,陣列大小可以動態指定

dynamicarray設計要點:類模板

dynamicarray類的宣告:

template < typename t >

class dynamicarray : public array;

template < typename t >

class dynamicarray : public array

else

}dynamicarray(const dynamicarray& obj)

}else

}dynamicarray& operator = (const dynamicarray& obj)

// 拷貝完就設定

t* temp = this->m_array;

this->m_array = array;

this->m_length = obj.m_length;

delete temp;

// 保證異常安全

}else

}return *this;

}int length() const

void resize(int length) // 動態重置陣列的長度

t* temp = this->m_array;

this->m_array = array;

this->m_length = length;

delete temp;

}else}}

~dynamicarray()

};

5、**優化

分析建構函式、拷貝建構函式、賦值操作符過載函式和resize函式,程式邏輯為:

建構函式:

拷貝建構函式:

賦值操作符過載函式:

resize函式:

總結:賦值操作符過載和resize**中有很多重複的邏輯, 建構函式和拷貝建構函式也有很多重複**,如何進行**優化

重複**邏輯的抽象

void init(t* array, int length)

else

}

t* copy(t* array, int len, int newlen)

}else

return ret;

}

void update(t* array, int length)

else

}

這三個函式均放在protected成員函式內

於是**簡化為:

public:

dynamicarray(int length)

dynamicarray(const dynamicarray& obj)

dynamicarray& operator = (const dynamicarray& obj)

return *this;

}int length() const

void resize(int length) // 動態重置陣列的長度

~dynamicarray()

6、總結
staticarray通過封裝原生陣列的方式實現陣列類

dynamicarray動態申請堆空間,使得陣列長度動態可變

陣列物件能夠代替原生陣列,並且使用上更安全

**優化是專案開發過程中不可或缺的環節

陣列的新玩法,建立陣列類。

陣列的新玩法,建立陣列類。c語言中的陣列不好用嗎?為什麼需要陣列類?仔細思考一下,原生陣列有缺點嗎?額,還真有!在使用陣列的時候,使用者想要獲取陣列的長度是比較麻煩,如果不清楚函式引數傳遞的規則,使用函式來求陣列長度,得到的必然是錯誤的結果。比如 include using namespace st...

C Array類 建立陣列

除了使用c 語法 建立陣列之外,還可以使用靜態方法 createinstance 建立陣列。舉個例子 array intarray1 array.createinstance typeof int 5 for int i 0 i 5 i for int i 0 i 5 i 在這個例子中,演示了如何建...

C Array類 建立陣列

c 中建立陣列,常見的例如 int array new int 5 除了使用c 語法 建立陣列之外,還可以使用靜態方法createinstance 建立陣列。array test array.createinstance typeof int 5 for int i 0 i test length ...