1. 程式人生 > 其它 >with open as f用法_UE4精品教程 | C++Tuple元組的詳細用法

with open as f用法_UE4精品教程 | C++Tuple元組的詳細用法

技術標籤:with open as f用法

哈嘍,大家好,我叫人宅,很高興和大家一起分享一下元組教學。

元組的這個詞在很多語言裡面已經有涉及到,使用上非常簡潔,tuple是泛化的std::pair,我們通常是把它當作一個結構體使用,比如我們可以將多個引數整合為一個結構體傳遞到函式內部,實現一些簡潔的操作。

1.tuple建立與基礎使用方式

tuple tu = make_tuple(1,2.f,3,4.f);//建立方式一
tuple tu(1,2.f,3,4.f);//建立方式二
//相當於結構體:
struct tu
{
int a;
float b;
int c;
float d;
}

以上的建立方式只是實參的拷貝,如果我們修改這些引數是無法真正修改實際的引數的值

當然我們還可以有直接修改引數的方式

int a = 0;
float b = .f;
int c = 0;
float d = .1;

auto tu = tie(a,b,c,d);

//本地進行修改
get<0> (tu) = 2;
get<1> (tu) = 4.5f;
get<2> (tu) = 234;
get<2> (tu) = 22.f;

//當然還可以這麼用
auto tu1 = make_tuple(1,2.f,3,4.f);

除此之外我們還可以使用forward_as_tuple構造我們的元組 這種構造是可以直接使用引數的原始引用 。

注意:如果是值,無法賦值,因為地址不一樣;

int a = 0;
float b = .f;
int c = 0;
float d = .1;

auto tu = forward_as_tuple(a,b,c,d);

get<0> (tu) = 2;
get<1> (tu) = 4.5f;
get<2> (tu) = 234;
get<2> (tu) = 22.f;

cout << a<< endl;
cout << b<< endl;
cout << c<< endl;
cout << d<< endl;

錯誤使用

auto tu = forward_as_tuple(1,2.f,3,4.f);

get<0> (tu) = 2;
get<1> (tu) = 4.5f;
get<2> (tu) = 234;
get<2> (tu) = 22.f;

//地址不一樣

2.獲取tuple的數量

tuple a(2, 3, 1, 4);
size_t Num= tuple_size::value;
cout << "Num = " << Num<< endl;

3.獲取tuple型別

tuple a(2, 3, 1, 4);
tuple_element<1, decltype(a)>::type t = std::get<0>(a);
cout << "t = " << t << endl;

4.拼接元組

tuple a(2, 3, 1, 4);
tuple b(2, 3, 1, 4);
tuple c(2, 3, 1, 4);
//拼接
auto TT = tuple_cat(a, b, c);

5.元組的簡易實現原理

#include 
using namespace std;
template
class Tuple;
template<>
class Tuple<>
{
};
template
class Tuple :private Tuple
{
using InheritedTuple = Tuple;
public:
Tuple()
{}
Tuple(TupleHead v, TupleTail... vtail)
:MyHead(v), InheritedTuple(vtail...)
{}
TupleHead Head() { return MyHead; }
InheritedTuple& Tail() { return *this; }
protected:
TupleHead MyHead;
};
int main()
{
Tuple c (1, 5.f, 3);
system("pause");
return 0;
}

6.列印tuple全部的值

遍歷tuple是非常麻煩的事情,以下提供了很好的遍歷列印

#include 
#include
#include
#include
using namespace std;
template
struct PrintTuple
{
static void Printf(const Tuple& Value)
{
PrintTuple::Printf(Value);
cout << "," << get(Value);
}
};
template
struct PrintTuple
{
static void Printf(const Tuple& Value)
{
cout << get<0>(Value);
}
};
template
void PrintfMyTuple(const tuple& vlaue)
{
PrintTuple::Printf(vlaue);
}
int main()
{
tuple a(2, 3, 1, 4);
PrintfMyTuple(a);
system("pause");
return 0;
}

以上是std C++ tuple用法,除此之外元組還可以比較。

轉載於人宅知乎文章

1ba1c38c81ad5de73189d365e37d564b.png