侯老師--STL原始碼剖析--書中的疑問一 (轉)
侯老師--STL原始碼剖析--書中的疑問一:namespace prefix = o ns = "urn:schemas--com::office" />
前言
我在看侯捷的STL原始碼剖析一書中”第一章Class的語法和語意(第30頁)”看到了如下的虛擬碼,我認為是有錯誤的,因為程式碼中在沒有初始化迭代子的情況下使用。程式碼如下:
狀態8:__STL_MEMBER_TEMPLATES
#include
using namespace std;
class alloc{
};
template
class vector{
public:
typedef T value_type;
typedef value_type* iterator;
template
void insert(iterator position, I first, I last)
{
cout<
}
};
int main()
{
int ia[5] = {0,1,2,3,4};
vector
vector
x.insert(ite, ia, ia+5); //insert()
}
程式碼中加黑的行出現錯誤,當編譯執行時出錯,當然得把iterator和vector用STL庫中iterator和vector宣告來替換。還有主函式沒有返回值。替換後程式碼如下:
替換後程式碼
#include
#include
using namespace std;
int main()
{
int ia[5] = {0,1,2,3,4};
vector
vector
x.insert(ite, ia, ia+5); //insert()
retrun 0;
}
出錯的原因是在定義ite時沒有初始化ite。當此型insert函式時(當然呼叫insert(int value)不會出錯,它不使用ite),它認為正確初始化了ite(ite此時為無效值,因為沒有初始化),所以當它向ite所指向的存放資料時出現訪問。當你在宣告vector
vector
書寫此文可能有小題大作之嫌,這裡指的錯誤是不初始化指標,但在本例子沒有出現非法訪問,因為它根本就沒有使用ite。但是當我實際應用時,一定要注意初始化,千萬不要以為侯老師這麼寫,就照搬抄寫,那你一定會後悔的。作者只是重在語義,也可能是我理解錯誤。總之,此文僅供參考,如有錯誤還望來信指正,在下感激不盡。
致謝!
袁凱
2001-11-09
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-990072/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 侯老師--STL原始碼剖析--書中的疑問二 (轉)原始碼
- 侯老師--STL原始碼剖析--書中的疑問三 (轉)原始碼
- 《STL原始碼剖析》-- memory原始碼
- 《STL原始碼剖析》 -- stl_algo.h原始碼Go
- 《STL原始碼剖析》-- stl_algobase.h原始碼Go
- 《STL原始碼剖析》-- stl_hashtable.h原始碼
- 《STL原始碼剖析》-- stl_multimap.h原始碼
- 《STL原始碼剖析》-- stl_map.h原始碼
- 《STL原始碼剖析》-- stl_multiset.h原始碼
- 《STL原始碼剖析》-- stl_set.h原始碼
- 《STL原始碼剖析》-- stl_tree.h原始碼
- 《STL原始碼剖析》-- stl_heap.h原始碼
- 《STL原始碼剖析》-- stl_slist.h原始碼
- 《STL原始碼剖析》-- stl_queue.h原始碼
- 《STL原始碼剖析》-- stl_stack.h原始碼
- 《STL原始碼剖析》-- stl_deque.h原始碼
- 《STL原始碼剖析》-- stl_list.h原始碼
- 《STL原始碼剖析》-- stl_pair.h原始碼AI
- 《STL原始碼剖析》-- stl_vector.h原始碼
- 《STL原始碼剖析》-- stl_iterator.h原始碼
- 《STL原始碼剖析》-- stl_uninitialized.h原始碼Zed
- 《STL原始碼剖析》-- stl_alloc.h原始碼
- STL原始碼剖析——vector容器原始碼
- 《STL原始碼剖析》-- stl_relops.h原始碼
- 《STL原始碼剖析》-- stl_hash_map.h原始碼
- 《STL原始碼剖析》-- stl_hash_set.h原始碼
- 《STL原始碼剖析》-- stl_construct.h原始碼Struct
- 《STL原始碼剖析》-- stl_config.h原始碼
- 《STL原始碼剖析》-- defalloc.h原始碼
- 《STL原始碼剖析》 -- 寫在最後原始碼
- 《STL原始碼剖析》-- 特別說明原始碼
- 《STL原始碼剖析》-- type_traits.h原始碼AI
- Jive原始碼的疑問原始碼
- 看JIVE原始碼的一點想法和疑問原始碼
- 【STL 原始碼剖析】淺談 STL 迭代器與 traits 程式設計技法原始碼AI程式設計
- JUnit原始碼中有一點疑問,請教原始碼
- C++(STL原始碼):37---仿函式(函式物件)原始碼剖析C++原始碼函式物件
- Flutter 原始碼剖析(一)Flutter原始碼