c – 如何生成具有唯一值的向量?

前端之家收集整理的这篇文章主要介绍了c – 如何生成具有唯一值的向量?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个例子来生成一个向量中的唯一对象:
#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类型的对象复制到所有向量元素中.

有没有办法创建一个包含所有唯一对象的向量(如第一个示例中所示)?

为了更清楚:我有一个包含向量的类.此向量必须包含所有唯一对象(不是一个对象的副本).我想在初始化列表中初始化它(不在构造函数的主体中).

解决方法

你的第一次尝试是有效的.

在目前的标准C 03这一行

std::vector< A > as( n );

明确定义为创建一个A对象并复制n次.

我相信在C 0x中,这被改为创建n默认构造的As(一个小差异).然后,您或许可以在As构造函数中执行某些操作,以使每个实例都是唯一的.

现在你不能.

原文链接:https://www.f2er.com/c/117811.html

猜你在找的C&C++相关文章