C++ 如何用不同类型的迭代器填充向量?

C++ 如何用不同类型的迭代器填充向量?,c++,boost,vector,iterator,C++,Boost,Vector,Iterator,我有以下代码的许多示例: struct foo1 { foo1(int ii = 0, int jj = 0) { this->ii = ii; this->jj = jj; } int ii; int jj; }; struct foo2 { foo2() { } foo2(const foo1& f) { this->f = f;

我有以下代码的许多示例:

struct foo1
{
    foo1(int ii = 0, int jj = 0)
    {
        this->ii = ii;
        this->jj = jj;
    }

    int ii;
    int jj;
};

struct foo2
{
    foo2()
    {
    }

    foo2(const foo1& f)
    {
        this->f = f;
    }

    foo1 f;
};
typedef std::vector< foo2 > foo_v;

typedef std::set< int > bar_s;

bar_s barSet;
barSet.insert(1); barSet.insert(2); barSet.insert(3);
barSet.insert(4); barSet.insert(5); barSet.insert(6);

...

foo_v fooVec;
for (bar_s::iterator b = barSet.begin(); b != barSet.end(); ++b)
    fooVec.push_back(foo2(*b));
但我正在努力找到一种方法,将
int
类型绑定到
foo2
结构的新实例


注:

给我以下错误:

错误1错误C2679:二进制“=”:未找到接受类型为“int”的右操作数的运算符(或没有可接受的转换)

int可转换为'foo'(唯一的构造函数可以用一个int参数调用,它不是显式的)

错误1错误C2679:二进制“=”:未找到接受类型为“int”的右操作数的运算符(或没有可接受的转换)

这是因为foo2不能从int来构造,只能从foo1来构造,并且只允许隐式转换的一个步骤。您可以使用std::transform:

std::transform(barSet.begin(), barSet.end(), 
               std::back_inserter(fooVec), 
               boost::lambda::constructor<foo2>());

您可以使用向量的构造函数来获取一对迭代器

foo_v fooVec(barSet.begin(), barSet.end());

给定
foo
的构造函数,
int
隐式转换为
foo

,如果在
bar\u s
上取消对迭代器的引用,将导致
int
。现在,
int
已经可以转换为
foo
,因此您应该能够将
bar\u s
上的迭代器后面的值插入
foo\u v
对不起,我已经修改了上面的代码-我的真实代码中有多个构造函数。没问题。foo仍然有一个可以用一个int参数调用的构造函数。您还可以添加另一个构造函数,例如,从double或string或任何您想要的,并且您仍然能够从int隐式构造foo(另外从double、string等)。STL容器也有来自两个迭代器的构造函数,这将复制另一个容器的指定范围。感谢您到目前为止的评论。。。抱歉,但我的例子(又)错了。我修改了它,并且给出了使用std::copy时出现的编译错误
std::copy(barSet.begin(), barSet.end(), std::back_inserter(fooVec));
std::transform(barSet.begin(), barSet.end(), 
               std::back_inserter(fooVec), 
               boost::lambda::constructor<foo2>());
foo2 makeFoo2(const foo& f) { return f; }
foo_v fooVec(barSet.begin(), barSet.end());