【发布时间】:2014-10-27 00:48:39
【问题描述】:
我最近一直在利用<numeric>iota 语句来增加int 类型的向量。但是现在我正在尝试使用该语句来增加具有 2 个成员的显式类。
所以这里是整数向量的用法:
vector<int> n(6);
iota(n.begin(), n.end(), 1);
鉴于Obj 类有一个名为m 的整数成员。构造函数将m 初始化为其对应的整数参数。这是我现在要做的:
vector<Obj> o(6);
iota(o.begin(), o.end(), {m(1)});
我尝试过类似这样的类增量重载:
Obj& operator ++() {
*this.m++;
return *this;
}
但我认为要么我的构造函数不是为这种重载而设计的,反之亦然。如何修改构造函数和重载以使用 iota 增加对象成员?提前致谢!
【问题讨论】:
-
我对您的描述有点困惑:
iota增加您传递给它的值(第三个参数),而不是它修改/遍历的范围的元素。你想通过增加它们来修改这些元素,还是用增加的值覆盖它们? -
@dyp 我想用递增的值覆盖它们,因为我的构造函数已经将它们设为 0。这可能吗?
-
iota(o.begin(), o.end(), Obj(1)); -
是的,你需要重载,因为 iota 会调用它(否则它会如何“增加”对象?)。
-
嗯,你也可以生成它们并增加值;)使用适当的迭代器,
vector<int> n(make_iota_iterator(6, Obj(1)), iota_iterator<Obj>());或类似的东西(使用自定义make_iota_iterator函数)。跨度>
标签: c++ c++11 vector overloading increment