编辑整个数据结构 c++



我有一个关于数据结构的问题。有没有办法一次编辑整个结构,而不是一次编辑一个变量?FI:

struct foo
{
  int a=5;
  int b=4;
  int c=8;
};
int main()
{
    foo f;
    f-1;
    return 0;
}

结果:

  f.int a=4;
  f.int b=3;
  f.int c=7;

如果有一种方法可以做到这一点,它将对我正在制作的特定项目有很大帮助。无论如何,感谢您的时间和帮助"D

您可能正在寻找运算符重载。

struct foo
{
  int a=5;
  int b=4;
  int c=8;
  foo operator-(int val) const {
      foo copy(*this);
      copy.a -= val;
      copy.b -= val;
      copy.c -= val;
      return copy;
  }
};
int main()
{
    foo f;
    f = f - 1;
    return 0;
}

如果您在编译时不知道参数的数量,也可以查看valarray

Xirema 的回答已经回答了你的问题。

我只想指出,如果您支持f-1作为运算符函数,则还应该支持几个运算符。

幸运的是,您可以重用一些实现来实现其他实现。

这是我的建议:

struct foo
{
   int a=5;
   int b=4;
   int c=8;
   // Pre-increment
   foo& operator++()
   {
      ++a;
      ++b;
      ++c;
      return *this;
   }
   // Post-increment
   foo operator++(int)
   {
      foo copy = *this;
      ++(*this);
      return copy;
   }
   // Pre-decrement
   foo& operator--()
   {
      --a;
      --b;
      --c;
      return *this;
   }
   // Post-decrement
   foo operator--(int)
   {
      foo copy = *this;
      --(*this);
      return copy;
   }
   // Increment
   foo& operator+=(int v)
   {
      a += v;
      b += v;
      c += v;
      return *this;
   }
   // Decrement
   foo& operator-=(int v)
   {
      // Use the inrement operator.
      return ( (*this) += (-v));
   }
   // Addition
   foo operator+(int v) const
   {
      foo copy = *this;
      copy += v;
      return copy;
   }
   // Subtraction
   foo operator-(int v) const
   {
      // Use the addition operator.
      return ((*this) + (-v));
   }
};

测试代码:

int main()
{
   foo f1;
   // Pre-increment
   ++f1;
   // Post-increment
   f1++;
   // Pre-decrement
   --f1;
   // Post-decrement
   f1--;
   // Increment
   f1 += 10;
   // Decrement
   f1 -= 20;
   // Addition
   foo f2 = f1 + 20;
   // Subtraction
   foo f3 = f2 - 50;
}

最新更新