不好意思! 足足一個月沒有交週記!
最近都在忙著脫團作戰,就暫時把Blog 丟到一邊去了。
最近在用stl 容器時發現一個思路的死角,寫上來分享一下。
class A
{
...
std::map<int,int> map_intint;
...
}
std::vector<A> vec_of_A;
這一段是模擬我遇到問題的程式。
它的錯誤等同於 std::vector< std::map<int,int> > vec_of_map;
std::vector中所有的 std::map 都將無法直接使用。
vec_of_A[i].map_intint 會出現無法操作的錯誤!
依據代號61的不具名同學的多方實驗,
std::vector 會預留 std::map 所需的空間,但是std::map本身並沒有初始化,所以無法操作。
於是61提出的解法是:
使用push 及pop之類的函式對 std::vector 做操作,
同時將 class A 的建構子加入 A(&A) 的複製功能,
就無礙地使用容器中的容器。
本懶人提出的解法是:
std::vector<A> vec_of_A; 改成 std::vector<A*> vec_of_pA;
自己做好物件的增減。
後面這個方法我用了一年多了,最近哪根筋不對才讓我遇到這bug。
為何那位61同學不具名呢? 因為他脫團很久了,過著壞人的幸福生活。 因此在這邊對他的貢獻不做任何感謝。
我脫團了沒呢? 
Marty 7.26.2005
那位不具名的 61 同學的意思是這樣的
回覆刪除vector 就如同是個籃子
我們可以跟他說我需要什麼樣的籃子
然後使用它的 reserve 函式教他準備至少可以放下 N 個東西的大小
今天假設我需要一個裝蘋果的籃子好了
然後再跟他說這籃子至少要能裝 10 個蘋果
如果在這之後我跟他說 "拿第三個蘋果出來" 會怎樣呢?
自然是沒有蘋果可以拿啊(因為我根本沒放蘋果進去)
所以才會需要 push 或 insert 這樣放蘋果的動作啊