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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
けえぼお

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

#1

投稿記事 by けえぼお » 14年前

久しぶりに質問します。
お世話になっております。

いままで 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の使い方について

#2

投稿記事 by めるぽん » 14年前

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の使い方について

#3

投稿記事 by けえぼお » 14年前

教えていただいてありがとうございました^^

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

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

閉鎖

“C言語何でも質問掲示板” へ戻る