作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [問題] 作業七...
時間Wed Dec 12 01:46:19 2007
: size_t IntArray::size() const
: {
: return _size;
: }
: int IntArray::getData(const size_t i) const
: {
: cout << _data[ i ] << endl;
: return 0;
: }
要 return _data[i] 吧?
: int* IntArray::getPosition(const size_t i) const
: {
: cout << _data << endl;
: return 0;
: }
return 0 as a pointer, 外面接的人 *p 之後當然會當掉...
: void IntArray::resize(const size_t s)
: {
: if ( s < _size )
: { _size = s; }
: if ( _size < s <= _capacity )
: { _size = s; }
記得要將多出來的清成 0
: if ( s > _capacity )
: {
: while ( s > _capacity )
: {
: _capacity = _capacity*2;
: };
記得要 reallocate 新的 _capacity 大小的 int array...
將資料 copy 過去, 然後將舊的 delete 掉
: }
: }
: void IntArray::setData(const size_t i, const int& v)
: { if ( i >= _size )
: { resize(i+1); }
_data[i] 沒設?
: else
: _data [ i ] = v;
: }
: static void printArray(const IntArray& arr)
: {
: cout << "Access by index : ";
: for (size_t i = 0, n = arr.size(); i < n; i++)
: cout << "[" << i << "] " << arr.getData(i) << " " << endl;
: cout << "Access by pointer: ";
: for (size_t i = 0, n = arr.size(); i < n; i++)
: cout << "[" << i << "] " << *(arr.getPosition(i)) << " " << endl;
: }
: int main()
: {
: IntArray arr(10);
: cout << "Initial data for arr ---" << endl;
: printArray(arr);
: for (size_t i = 0, n = arr.size(); i < n; i++)
: arr.setData(i, i*i);
: cout << "Squared data for arr ---" << endl;
: printArray(arr);
: arr.resize(5);
: cout << "Resize arr to 5 ---" << endl;
: printArray(arr);
: arr.resize(12);
: cout << "Resize arr to 12 ---" << endl;
: printArray(arr);
: for (size_t i = 12; i < 20; i += 2)
: arr.setData(i, i * 3);
: cout << "Setting out of bound data ---" << endl;
: printArray(arr);
: }
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.121.128.162
1F:→ INsoarDEEP:寫了半天還是錯誤百出>"<... 12/12 01:46
2F:推 dryman:就我自己慘痛的經驗而言,程式一小段一小段寫比較容易成功 12/12 08:19
3F:→ dryman:一小段run它沒問題在加上其他的,不然程式碼一長怎麼死的 12/12 08:20
4F:→ dryman:都不知道。 12/12 08:21
5F:→ ric2k1:感謝分享慘痛經驗, 的確程式最好是寫一段測一段比較好 12/12 08:39