C++的知識點很零碎繁瑣,只是總結沒啥作用,更多的應該是在實踐中找問題。今天我去編寫《數據結構,算法與應用 C++語言描述》中線性表的實現代碼,感覺寫代碼能力生疏了好多。
編寫過程中,我發現了幾個問題,很值得關注:
1、我的代碼是通過類模板編寫的。很多人寫代碼的時候,都把聲明和實現放在一個頭文件裡,primer中說要借用export才能實現分離編譯,對於這點,我也不是很了解,但是我取巧了下,通過兩個 #ifndef....#endif 達到了聲明放在.h, 實現放在了.cpp中。
2、模板類中關於<<的重載,需要在聲明中加入 <> ,要不然編譯不通過。
3、cout 的刷新問題。 如 fun(int& x), 若我們這麼用 cout << fun(y) << y ; 屏幕上顯示的不是y更新後的值,而是調用y前的值。而將它分成兩個cout來輸出,或者刷新後輸出,那麼將是正確的。
好的,貼代碼: 實現環境 vs2010
MY_LINEARLIST_H<ostream> < T> cap = ~ find( pos, T& hold) search( T& x) <T>& drop( pos, T&<T>& insert( pos, T& printt(ostream& os)& << (ostream& os, LinearList<T>&*
MY_LINEARLIST_CPP<cstdlib><ostream>< T><T>::LinearList(= == < T><T>::~LinearList( (element !=< T> LinearList<T> size == < T> LinearList<T>< T> LinearList<T>::find( pos,T& hold) (pos > size || pos < ) = element[pos- < T> LinearList<T>::search( T& x) ( i=; i<size; ++ (element[i] = i+ < T><T>& LinearList<T>::drop( pos, T& (pos > size || pos < = element[pos-( i=pos; i<size; ++-] =-- *< T><T>& LinearList<T>::insert( pos, T&(size ==* newElement = T[capacity*<<= ( i=; i<pos; ++-] = element[i-=( i=pos; i<size; +++] =++=( i=size; i>=pos; --= element[i--] =++ *< T> LinearList<T>::printt(ostream& ) ( i=; i<size; ++ << element[i] << < T>& << (ostream& , LinearList<T>&);
LinearList<> L( y= L.insert (, cout << L << L.insert (, cout << L << L.insert (, cout << L << cout << << y << cout << << L.find(,y) << << y << cout << << y << }