一个类别c的增量丝毫矢量++(iota increment vector of a class c+

2019-10-21 04:46发布

我最近一直在趁着的<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;
}

但我认为,无论是我的构造不适合这个过载或反之亦然。 如何修改我的构造函数和重载递增使用ι-对象成员? 提前致谢!

Answer 1:

我不知道我理解你的问题。 请问下面的代码匹配你想要什么?

#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


Answer 2:

更新:我改变了答案提供的意见要求的功能,即:要能更新多个领域。

格式类似如下的方式,你的类。 您需要重载++运算符来增加双方_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));


Answer 3:

#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 );
}


文章来源: iota increment vector of a class c++