0

私は現在vector、楽しみのために自分のおもちゃを作っています。現在または次の標準またはBoostに次のようなものがあるかどうか疑問に思っていましたか?

template<class T>
void destruct(T* begin, T* end)
{
    while (begin != end)
    {
        begin -> ~T();
        ++begin;
    }
}

template<class T>
T* copy_construct(T* begin, T* end, T* dst)
{
    while (begin != end)
    {
        new(dst) T(*begin);
        ++begin;
        ++dst;
    }
    return dst;
}
4

3 に答える 3

1

std::vector、私が間違っていなければ、そのアロケーターのコンストラクトとデストラクト関数を個々のアイテムに適用するため、バインダー( などstd::tr1::bind)を使用してそれらを許可std::transformおよび/または実行することもできますstd::for_each

しかし、コピー ループについては、 std::uninitialized_copyも存在するようです。

于 2010-05-07T13:52:17.803 に答える
0

ベクトル要素は逆の順序で破棄されます。

于 2010-05-07T13:40:16.213 に答える
0

STL は、アロケーター(STL コンテナーの既定のテンプレート パラメーターとして渡される) に依存しています。アロケーターにはや のようなメソッドがconstructありますが、すべてが範囲で動作するわけではありません。これらの機能を提供するのは、コンテナーではなくアロケーターです。STL のような独自のベクトル クラスを作成する場合は、アロケーターも再作成する必要があります。destroyuninitialized_fill

于 2010-05-07T13:48:34.613 に答える