定义一个包含3个int值的类型

时间:2014-03-10 14:54:21

标签: c++ variables

我是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”...我首先是因为我需要在函数中声明它我将使用结构,但结果是两种情况都有错误。

4 个答案:

答案 0 :(得分:5)

最短的方法是使用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比一个简单的结构要复杂得多,要了解它,您需要了解模板和可变参数模板。< / p>

答案 1 :(得分:0)

struct TypeWith3Ints
{
  public:
    int a;
    int b;
    int c;
};

答案 2 :(得分:0)

在这种情况下,使用std::array<int, 3>比元组更受欢迎,因为可以使用同质容器。

如果你想要typedef:

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

答案 3 :(得分:0)

使用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;
 }

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