読者です 読者をやめる 読者になる 読者になる

C++0x uninitialized_copy_n

C++

uninitialized_copy_n を見落としていたので More STL Algorithm に追記


いちおう、こっちにも書いておく


・uninitialized_copy_n

 uninitialized_copy の N 個版. first から n 個を配置 new で初期化する

template<class InputIterator, class Size, class ForwardIterator>
inline ForwardIterator uninitialized_copy_n(InputIterator first, Size n, ForwardIterator result)
{
    for (; n > 0; ++result, ++first, --n) {
        new (static_cast<void*>(&*result)) typename iterator_traits<ForwardIterator>::value_type(*first);
    }
    return result;
}
#include <iostream>
#include <algorithm>
#include <memory>

using namespace std;

class integer {
public:
    integer(int value) : value_(value) {}
    int get() const { return value_; }
private:
    int value_;
};

void disp(const integer& value)
{
    cout << value.get() << endl;
}

int main()
{
    const int size = 3;
    int ar[size] = {3, 1, 4};

    integer* par = (integer*)malloc(size * sizeof(int));

//  uninitialized_copy(ar, ar + size, par);
    uninitialized_copy_n(ar, size, par);

    for_each(par, par + size, &disp); // 3, 1, 4

    free(par);
    return 0;
}


# uninitialized_copy はじめて使った(知った)