我最近一直在趁着的<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;
}
但我认为,无论是我的构造不适合这个过载或反之亦然。 如何修改我的构造函数和重载递增使用ι-对象成员? 提前致谢!
我不知道我理解你的问题。 请问下面的代码匹配你想要什么?
#include <algorithm>
#include <iostream>
#include <vector>
class Object {
public:
Object(int value = 0)
: m_value(value) { }
Object& operator++() {
m_value++;
return *this;
}
int value() const {
return m_value;
}
private:
int m_value;
};
int main() {
std::vector<Object> os(10);
std::iota(os.begin(), os.end(), 0);
for(const auto & o : os) {
std::cout << o.value() << std::endl;
}
}
用gcc 4.8 OS X 10.7.4编译我得到:
$ g++ iota-custom.cpp -std=c++11
$ ./a.out
0
1
2
3
4
5
6
7
8
9
更新:我改变了答案提供的意见要求的功能,即:要能更新多个领域。
格式类似如下的方式,你的类。 您需要重载++
运算符来增加双方_m
和_c
。
class Obj {
private:
int _m;
char _c;
public:
Obj(int m, char c) : _m(m), _c(c)
{
}
MyClass operator++()
{
_m++;
_n++;
return *this;
}
};
下面的代码将初始化向量o
6 Obj
的,对于每一个包含升序值_m
和_c
从1开始。
vector<Obj> o(6);
iota(o.begin(), o.end(), Obj(1, 1));
#include <numeric> // std::iota
#include <vector>
using namespace std;
class Obj
{
private:
int m_;
public:
auto value() const -> int { return m_; }
Obj( int m = 0 ): m_( m ) {}
};
auto main() -> int
{
vector<Obj> v(6);
iota( v.begin(), v.end(), 1 );
}