2005年7月25日 星期一

stl 容器的應注意事項

不好意思! 足足一個月沒有交週記!

最近都在忙著脫團作戰,就暫時把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