C 初學 動態陣列類模板

2021-10-08 10:13:06 字數 3166 閱讀 3678

動態陣列類模板:

程式設計過程中用到了模板類、函式模板、運算子過載、建構函式、析構函式、動態記憶體分配等知識。理論上改模板能實現訪問任意型別(包括自定義)元素。

標頭檔案1:stdafx.h
#ifndef stdafx_h_included

#define stdafx_h_included

#include

#include

using

namespace std;

#endif

// stdafx_h_included

標頭檔案2:動態陣列類模板 arrs.h
#ifndef arrs_h_included

#define arrs_h_included

#include

"stdafx.h"

template

<

class

t>

class

arrs

arrs

(int num)

:nums

(num >

0? num :1)

,ptr

(num < capacity ?

new t[capacity]

:new t[num]

)arrs

(const arrs& arr)

}//析構函式

~arrs()

nums =0;

}//陣列重寫

arrs restart()

return

*this;}

else

return atemp;}}

//初始化原始陣列

void

input()

}//輸出當前陣列

void

show()

cout << endl << endl;

}//獲取陣列大小

intgetsize()

//刪除指定位置的元素

void

deleteelem

(int n)

//將要刪除的位置從小到大排序

for(

int i =

0; i < n -1;

++i)}}

for(

int i =

0; i < n; i++

) nums--

;for

(int k =

0; k < n; k++)}

}//獲取指定位置的元素

void

getelem()

//加號運算子過載

arrs operator+(

int n)

//已有元素

else

//追加元素

}return atemp;

}else

return

*this;}

}//=運算子過載

arrs&

operator

=(arrs& myarray)

this

->capacity = myarray.capacity;

this

->nums = myarray.nums;

this

->ptr =

new t[

this

->capacity]

;for

(int i =

0; i <

this

->nums; i++

)return

*this;}

//過載

t&operator

(int index)

return

this

->ptr[index];}

//任意位置增加陣列

arrs expand

(int n,

int m)

//指定位置後移

for(

int j = m; j < nums; j++

)for

(int i = m; i < m + n; i++

)return atemp;

}else

for(

int i = m; i < m + n; i++

)return

*this;}

}public

:int nums;

//當前陣列元素總數

t* ptr;

//指向當前陣列的指標

int capacity =7;

//當前陣列最大容量};

#endif

// arrs_h_included

cpp檔案:main.cpp
#include

"arrs.h"

template

<

typename dt>

void

menu

(arrs

& arr1)

;int

main()

template

<

typename dt>

void

menu

(arrs

& arr1)

case2:

case3:

case4:

default

:exit(0

);}}

執行結果

遇到的問題及解決辦法

原因:記憶體使用時越界!nums+n是開闢t型別的總個數,引用時卻達到了nums+n+n

解決辦法:將nums+n改為nums即可

動態陣列初學

要求 首先輸入乙個整數,決定了你要找的素數的範圍。然後動態分配出乙個陣列,進行素數篩。最後,根據需要輸出陣列中的素數 比如要求輸出某個範圍而不是整個陣列的素數都輸出 統計在這個範圍內素數的個數。include include intis primer int b,int arr int main p...

C 有界陣列模板類(類模板)

題目描述編寫有界陣列模板boundarray 即檢查對陣列元素下標引用並在下標越界時終止程式的執行 能夠儲存各種型別的資料。要求實現對陣列進行排序的方法sort,及對排序後的陣列進行查詢的方法search。輸入 第一行先輸入t,表示有t個測試用例 從第二行開始輸入每個測試用例的資料。首先輸入資料型別...

初學C 模板

排序與檢索 sort 排序,lower bound 檢索 lower bound a,a n,x a 用於查詢大餘或等於x的第乙個位置。template typename 我試了一下sort函式,從小到大排序,double型別的6.0,cout 輸出6 voctor名稱 eg.vector a 定義...