ページ 11

boost::ptr_vectorの使い方について

Posted: 2010年11月20日(土) 10:11
by けえぼお
久しぶりに質問します。
お世話になっております。

いままで std::vector<boost::shared_ptr<~>> を使っていたところを、
Let's Boost というサイトを見て、boost::ptr_vector<~> にしようと思ったのですが、
typedef boost::shared_ptr<int> sp;
    typedef std::vector<sp>        vsp;
    vsp cVect;
    cVect.push_back( sp( new int( 0 ) ) );

    // 代入
    cVect[0] = sp( new int( 10 ) );
↑のように指定した要素に値を代入するやり方が分からなくて困っています。
typedef boost::ptr_vector<int> vp;
    vp cVect;
    cVect.push_back( new int( 0 ) );

    // 削除&代入
    delete &cVect[0];
    *( cVect.c_array() + 0 ) = new int( 10 );
一応↑のように書けば同じことができたのですが、いちいち削除するコードを書くのが無駄な気がしてしまいす。

アドバイスをお願いします!

あと、 boost の使いかたについて基本的なことを解説しているサイトってありませんか?
「こういうのがある」ということだけでも覚えておけば何か作ろうと思ったときに調べる手間が省けると思うのですが。

Re:boost::ptr_vectorの使い方について

Posted: 2010年11月20日(土) 11:20
by めるぽん
cVect.push_back(new int(0));
cVect.replace(0, new int(10));
でいいと思います。
基本的に ptr_container の中身を自前で delete するのは危険なのでやるべきじゃないです(delete をしなくてもいいのが ptr_container の特徴の1つですし)。


>boost の使いかたについて基本的なことを解説しているサイトってありませんか?
それが Let's Boost ではないのでしょうか。ほぼ全部のライブラリについて網羅されてると思いますが。
あそこの人は本も出されてますね。こちらの方はかなり詳細に書かれているので手元に置いておいてもいいと思います。
http://www.kmonos.net/pub/BoostBook/

Re:boost::ptr_vectorの使い方について

Posted: 2010年11月20日(土) 12:45
by けえぼお
教えていただいてありがとうございました^^

>自前で delete するのは危険なのでやるべきじゃないです
そういえばそうですね。忘れてました。

>あそこの人は本も出されてますね。こちらの方はかなり詳細に書かれているので手元に置いておいてもいいと思います。
早速買ってみようと思います。