[問題] 書上c++code的問題想請教

看板C_and_CPP (C/C++)作者 (allstars)時間14年前 (2011/10/18 23:47), 編輯推噓0(0015)
留言15則, 4人參與, 最新討論串1/1
我在看The C++ Programming Language時 P436 上面的Vector 有些問題 template<class T> class Itor { public: virtual T* first() = 0; virtual T* next() = 0; }; template<class T> Vector_itor : public Itor<T> { Vector<T> &v; // question 1, why using ref?? why not just Vector<T> v; size_t index; public Vector_itor(Vector<T>&vv) : v(vv), index(0) { } T* first() { return (v.size()) ? &v[index=0] : 0;} // question 2, why reset index to 0? T* next() { return (++index<v.size()) ? &v[index] : 0; } }; 以上2個問題不太了解 希望知道的人可以提示一下 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.130.135.229

10/18 23:50, , 1F
我的答案1.複製一份效率太差。2.next改變index要歸零。
10/18 23:50, 1F

10/18 23:55, , 2F
補充q1,如果還需要新增功能比如修改元素的值的話,
10/18 23:55, 2F

10/18 23:56, , 3F
用複製的就沒有意義了。
10/18 23:56, 3F

10/19 01:07, , 4F
1. iterator pattern, 用參考是因為它實現的是
10/19 01:07, 4F

10/19 01:08, , 5F
associate 語意, 當然用 const pointer 也可以, 這樣
10/19 01:08, 5F

10/19 01:09, , 6F
一旦綁定就不能再變更意味著設計來就是當做免洗迭代器
10/19 01:09, 6F

10/19 01:11, , 7F
在 block 裡或是用過即丟 2. first 的設計功能和 next
10/19 01:11, 7F

10/19 01:12, , 8F
有重疊到, 不過兼具了從頭開始尋訪的功能, 改成 if 你
10/19 01:12, 8F

10/19 01:12, , 9F
應會比較了解, 我個人是不推這本書, 因為很多寫法還是
10/19 01:12, 9F

10/19 01:13, , 10F
承襲 C 語言的習慣, 使得有些地方變得較沒彈性, 像是
10/19 01:13, 10F

10/19 01:14, , 11F
T* 這樣寫死就沒辦法在有改進的空間, Vector元素位置
10/19 01:14, 11F

10/19 01:14, , 12F
的合法性也沒有考慮進去, 取址是狹隘的寫法
10/19 01:14, 12F

10/19 13:58, , 13F
用ref的話,主要是同一個vector用同一個iterator吧?
10/19 13:58, 13F

10/19 13:59, , 14F
誤會一場...
10/19 13:59, 14F

10/20 00:30, , 15F
thanks
10/20 00:30, 15F
文章代碼(AID): #1EdP-Ntz (C_and_CPP)
文章代碼(AID): #1EdP-Ntz (C_and_CPP)