【发布时间】:2011-05-19 01:27:05
【问题描述】:
下面的代码我有很多例子:
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));
如何改进填充 foo2 新向量的代码?
我的想法是这样的:
std::remove_copy_if(barSet.begin(), barSet.end(),
std::back_inserter(fooVec), ...)
但我正在努力寻找将int 类型绑定到foo2 结构的新实例的方法。
注意:
std::copy(barSet.begin(), barSet.end(), std::back_inserter(fooVec));
给我以下错误:
错误 1 错误 C2679:二进制“=”:未找到采用“int”类型右手操作数的运算符(或没有可接受的转换)
【问题讨论】:
-
如果您取消引用
bar_s上的迭代器,则会产生int。现在,int已经可以转换为foo,因此您应该能够将bar_s上的迭代器后面的值插入foo_v