重載了運算符"=","[]",">>","<<"。
構造函數中sz被賦初值0,缺省長度為0。為了能像高級程序語言中的數組一樣獲取給定下標I的值,重載了運算符[],還增加檢查數組
是否越界的功能,c++中不做數組越界檢查。重載"="的函數中,防止了無意義的自我賦值,賦值前動態空間釋放并且重新分配,就達
到了整體賦值的目的。
斷言函數assert是c++提供的一種功能,若斷言語句的條件滿足則繼續執行后面的語句,否則出錯處理,終止程序運行。
實現代碼:
~~~
#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"
#include "assert.h"
using namespace std;
template <class T>
class Array1D
{
public:
Array1D(int sz = 0); // 缺省時長度為0
~Array1D() { delete []elements; }
T &operator [](int i) const; // 取元素值
Array1D<T> &operator = (const Array1D<T> &r); // 整體賦值
friend istream &operator>>(istream &in, Array1D<T> &r) {
cout << "Input Array" << endl;
for(int i = 0; i < r.size; ++i)
in >> r.elements[i];
return in;
}
friend ostream &operator<<(ostream &out, const Array1D<T> &r) {
out << "Array = " ;
for(int i = 0; i < r.size; ++i)
out << r.elements[i] << " ";
out << endl;
return out;
}
/* data */
private:
int size;
T *elements; // 指向T類型數組的指針
};
template <class T>
Array1D<T>::Array1D(int sz)
{
assert(sz >= 0); // 越界檢查,滿足括號內條件才執行后面的語句
size = sz;
elements = new T[sz];
}
template <class T>
T &Array1D<T>::operator [](int i) const
{
assert(i >= 0 && i < size); // 越界檢查,滿足括號內條件才執行后面的語句
return elements[i];
}
template <class T>
Array1D<T>& Array1D<T>::operator=(const Array1D<T> &r) // 數組r整體賦值給this
{
if(this != &r) { // 防止自我賦值
size = r.size;
delete []elements; // 釋放原空間
elements = new T[size]; // 重新分配空間
for(int i = 0; i < size; ++i) // 復制元素
elements[i] = r.elements[i];
}
return *this;
}
int main(int argc, char const *argv[])
{
Array1D<int> a(5), b(8);
Array1D<int> c; // 采用缺省長度0
cin >> a;
cout << "a " << a;
cin >> b;
cout << "b " << b;
cout << "c " << c;
cout << "a[0] = " << a[0] << endl;
cout << "b[5] = " << b[5] << endl;
c = b;
cout << "c = b, c " << c;
b = a;
cout << "b = a, b " << b;
return 0;
}
~~~
- 前言
- 線性表的順序表示:順序表ADT_SeqList
- 結點類和單鏈表ADT_SingleList
- 帶表頭結點的單鏈表ADT_HeaderList
- 堆棧的順序表示ADT_SeqStack
- 循環隊列ADT_SeqQueue
- 一維數組ADT_Array1D
- 稀疏矩陣ADT_SeqTriple
- 數據結構實驗1(順序表逆置以及刪除)
- 數據結構實驗1(一元多項式的相加和相乘)
- 二叉樹ADT_BinaryTree
- 優先隊列ADT_PrioQueue
- 堆ADT_Heap
- 數據結構實驗2(設計哈弗曼編碼和譯碼系統)
- ListSet_無序表搜索
- ListSet_有序表搜索
- ListSet_對半搜索的遞歸算法
- ListSet_對半搜索的迭代算法
- 二叉搜索樹ADT_BSTree
- 散列表ADT_HashTable
- 圖的鄰接矩陣實現_MGraph
- 圖的鄰接表實現_LGraph
- 數據結構實驗2(二叉鏈表實現二叉樹的基本運算)
- 數據結構實驗3(圖的DFS和BFS實現)
- 數據結構實驗3(飛機最少環城次數問題)
- 拓撲排序的實現_TopoSort
- 數據結構實驗4(排序算法的實現及性能分析)