Как сгенерировать вектор с уникальными значениями?

У меня есть этот пример для генерации уникальных объектов в вектор:

#include <iostream>
#include <vector>
#include <algorithm>

int v=0;

struct A
{
    A() : refValue( v++)
    { std::cout<<"constructor refValue="<<refValue<<std::endl; }
    A( const A &r ) : refValue(r.refValue)
    { std::cout<<"copy constructor refValue="<<refValue<<std::endl; }
    A& operator=( const A &r )
    {
        refValue = r.refValue;
        std::cout<<"operator= refValue="<<refValue<<std::endl;
        return *this;
    }
    ~A() { std::cout<<"destructor refValue="<<refValue<<std::endl; }

    int refValue;
};

A GenerateUnique()
{
    A unique;
    return unique;
}
struct B
{
    B( const int n) : v()
    {
        std::generate_n( std::back_inserter( v ), n, &GenerateUnique );
    }
    std::vector< A > v;
};

int main()
{
    B b(3);
}

Если я изменю основное значение на это:

struct B
{
    B( const int n) : v(n)
    {
    }
    std::vector< A > v;
};

, тогда один объект типа A будет скопирован во все элементы вектора.

Есть ли способ создать вектор со всеми уникальными объектами (как в 1-м примере)?

Чтобы было понятнее: у меня есть класс, содержащий вектор. Этот вектор должен содержать все уникальные объекты (а не копию одного объекта). И я хотел бы инициализировать его в списке инициализации (а не в теле конструктора).

7
задан BЈовић 28 July 2011 в 07:34
поделиться