定义保存 3 整数值的类型
Defining a type that holds 3 int value
我是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;
}
您也可以不制作构造函数并使用{}
表示法。
相关文章:
- 将超出范围的整数分配给有符号字符类型
- 当我输入字符类型的数字时,为什么我无法获得整数?
- 整数类型应该显式转换(例如"int"到"无符号")还是只会增加混乱?
- 在 c++ 中,能够将浮点类型加 1 的最大整数是多少?
- 为什么 Clang 和 GCC 中两个无符号整数之和的结果类型不同
- 比较两个整数在C++中与未知 int 类型的相等性
- 如何在不给它任何类型(如整数)的情况下定义某物?
- 通过编译时值推断整数的类型
- C++/错误:表达式必须具有整数或无作用域枚举类型
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- 有没有办法将字符类型转换为整数?
- C++,概念不适用于无符号整数作为结果类型?
- 如何将整数分配给 char 类型的变量
- 类型转换问题:返回为整数而不是浮点/类型
- 涉及旧式枚举和整数类型的重载解析
- 将字符串转换为整数类型T,检查是否存在溢出
- 如何判断 c++ 向量中的值类型(整数或双精度)?
- 在 C/C++ 中,混合类型整数数学所需的最小类型向上转换是多少?
- 如何将字节数组转换为整数类型(整数、长整型、短型等)"安眠安"?
- 我可以在C++中制作一个强类型整数吗?