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 容器中作为默认模板参数传递),这些分配器具有方法constructdestroy其他类似的方法uninitialized_fill,但并非所有分配器都对范围进行操作。分配器,而不是容器,负责提供这些功能。如果您想编写自己的向量类,如 STL,您还需要重新发明分配器。

于 2010-05-07T13:48:34.613 回答