定义保存 3 整数值的类型

Defining a type that holds 3 int value

本文关键字:类型 整数 保存 定义      更新时间:2023-10-16

我是C++新手,无法弄清楚如何定义一个包含 3 个值的变量,例如,坐标包含 2 个值,如 (x,y(。

我试过了:

typedef int U_K(int a,int b,int c);

但这似乎行不通。

我真的很感激一个快速简单的答案:)

谢谢!

编辑:所以我这样做了:

struct U_K{
    float a,b,c;
};
    U_K Uk; //this line

这是错的吗? 因为我得到那行的"未知类型名称U_K"......我首先虽然是因为我需要在我将使用该结构的函数下声明它,但事实证明这两种情况都有错误。

最短的方法是使用struct

struct U_K
{
    int a,b,c;
};

用法:

U_K tmp;
tmp.a = 0;
tmp.b = 1;
tmp.c = 2;

您可以通过添加成员函数/构造函数来增加该类型的复杂性,以使U_K的使用更容易:

struct U_K
{
    int a,b,c;
    U_K() //default constructor
        :a(0)
        ,b(0)
        ,c(0)
    {}
    U_K(int _a_value,int _b_value, int _c_value) //constructor with custom values
        :a(_a_value)
        ,b(_b_value)
        ,c(_c_value)
    {}
};
//usage:
int main()
{
    U_K tmp(0,1,2);
    std::cout << "a = " << tmp.a << std::endl;//print a
    std::cout << "b = " << tmp.b << std::endl;//print b
    std::cout << "c = " << tmp.c << std::endl;//print c
}

或者,您可以使用 std::tuple 来获得相同的结果。使用它是不同的:

std::tuple<int,int,int> t = std::make_tuple(0,1,2);
std::cout << "a = " << std::get<0>(t) << std::endl;//print first member
std::cout << "b = " << std::get<1>(t) << std::endl;//print second member
std::cout << "c = " << std::get<2>(t) << std::endl;//print third member

如果你现在正在学习 c++,你应该知道实现std::tuple比一个普通的结构要复杂得多,要理解它,你需要学习模板和可变参数模板。

struct TypeWith3Ints
{
  public:
    int a;
    int b;
    int c;
};
在这种情况下,使用

std::array<int, 3> 优先于元组,因为可以使用同质容器。

如果要键入 def:

#include <array>
typedef std::array<int, 3> X;

使用 std::tuple,那么你就不必创建自己的结构。只是写

std::tuple<int, int, int> your_tuple(a,b,c);
std::cout << std::get<1>(your_tuple) << ' '; // b
your_tuple = std::make_tuple(c,d,e);
std::cout << std::get<0>(your_tuple) << ' '; // c

如果您想要自己的名字,请使用别名,例如:

typedef std::tuple<int, int, int> your_name;
your_name your_object(a,b,c); //your_tuple
std::cout << std::get<2>(your_tuple) << ' '; // c

如果你愿意,你自己的结构,如果你想写object(x,y,z),你应该使构造函数甚至重载运算符()。它更复杂。我建议不要这样做。除非这有更深的含义。如果你真的想要它,它可能看起来像:

struct coordinate
 {
  int x,y,z;
  coordinate(int a, int b, int c) : x(a), y(b), z(c)
   {}
  void operator()(int a, int b, int c)
   {
    x = a;
    y = b;
    z = c;
   }
 } my_object(10,20,30);
int main()
 {
  std::cout<<my_object.x<<' '<<my_object.y<<' '<<my_object.z<<'n';
  my_object(30,40,50);
  std::cout<<my_object.x<<' '<<my_object.y<<' '<<my_object.z<<'n';
  return 0;
 }

您也可以不制作构造函数并使用{}表示法。