Tuple یا چند‌تایی در ++C

Tuples in C Plus Plus

Tuples-in-C-Plus-Plus

سلام به کاربران روکسو. در این قسمت به معرفی Tuples یا چند‌تایی می‌پردازیم. تا پایان با ما همراه باشید.

tuple یا چند‌تایی چیست؟

یک tuple، شی است که می‌تواند تعدادی از عناصر را نگه‌دارد. عناصر می‌توانند از انواع داده‌ی مختلف باشند. عناصر tuples به ترتیبی که در آن، آن‌ها دسترسی خواهند داشت، به عنوان آرگومان (arguments) مقداره‌دهی اولیه شده هستند.

عملیات‌ها بر روی tuple

1. تابع ()get: تابع ()get برای دسترسی مقادیر tuple و ویرایش‌ها آن‌ها استفاده شده است. این تابع شاخص ( index ) نام tuple را به عنوان آرگومان برای دسترسی به یک عنصر خاص tuple می‌پذیرد.

2. تابع ()make_tuple: تابع ()make_tuple برای تخصیص tuple با مقادیر استفاده شده است. مقادیر ارسال‌شده باید در ترتیبی با مقادیر تعریف‌شده در tuple باشند.

قطعه‌کُد زیر را برای درک بهتر ()tuple، تابع ()get و همچنین تابع ()make_pair مشاهده کنید.

// C++ code to demonstrate tuple, get() and make_pair()
#include<iostream>
#include<tuple> // for tuple
using namespace std;
int main()
{
    // Declaring tuple
    tuple <char, int, float> geek;
  
    // Assigning values to tuple using make_tuple()
    geek = make_tuple('a', 10, 15.5);
  
    // Printing initial tuple values using get()
    cout << "The initial values of tuple are : ";
    cout << get<0>(geek) << " " << get<1>(geek);
    cout << " " << get<2>(geek) << endl;
  
    // Use of get() to change values of tuple
    get<0>(geek) = 'b';
    get<2>(geek) =  20.5;
  
     // Printing modified tuple values
    cout << "The modified values of tuple are : ";
    cout << get<0>(geek) << " " << get<1>(geek);
    cout << " " << get<2>(geek) << endl;
  
    return 0;
}

خروجی قطعه‌کُد بالا به این صورت خواهد بود:

The initial values of tuple are : a 10 15.5
The modified values of tuple are : b 10 20.5

در قطعه‌کُد بالا، تابع ()get اولین و سوم مقادیر tuple را ویرایش می‌کند.

3. tuple_size: تعداد عناصر ارائه‌شده در tuple را برمی‌گرداند.

قطعه‌کُد زیر را برای درک ساده‌تر این موضوع مشاهده کنید:

/C++ code to demonstrate tuple_size
#include<iostream>
#include<tuple> // for tuple_size and tuple
using namespace std;
int main()
{
  
    // Initializing tuple
    tuple <char,int,float> geek(20,'g',17.5);
  
    // Use of size to find tuple_size of tuple
    cout << "The size of tuple is : ";
    cout << tuple_size<decltype(geek)>::value << endl;
  
    return 0;
  
}

خروجی قطعه‌کُد بالا به این صورت خواهد بود:

The size of tuple is : 3

4. تابع ()swap:‌ تابع ()swap، عناصر 2 tuple مختلف را عوض می‌کند.

برای درک بهتر این تابع، قطعه‌کُد زیر را مشاهده کنید:

//C++ code to demonstrate swap()
#include<iostream>
#include<tuple> // for swap() and tuple
using namespace std;
int main()
{
  
    // Initializing 1st tuple
    tuple <int,char,float> tup1(20,'g',17.5);
      
    // Initializing 2nd tuple
    tuple <int,char,float> tup2(10,'f',15.5);
      
    // Printing 1st and 2nd tuple before swapping
    cout << "The first tuple elements before swapping are : ";
    cout <<  get<0>(tup1) << " " << get<1>(tup1) << " "
         << get<2>(tup1) << endl;
    cout << "The second tuple elements before swapping are : ";
    cout <<  get<0>(tup2) << " " << get<1>(tup2) << " " 
         << get<2>(tup2) << endl;
      
    // Swapping tup1 values with tup2
    tup1.swap(tup2);
      
    // Printing 1st and 2nd tuple after swapping
    cout << "The first tuple elements after swapping are : ";
    cout <<  get<0>(tup1) << " " << get<1>(tup1) << " " 
         << get<2>(tup1) << endl;
    cout << "The second tuple elements after swapping are : ";
    cout <<  get<0>(tup2) << " " << get<1>(tup2) << " " 
         << get<2>(tup2) << endl;
  
    return 0;
}

خروجی قطعه‌کُد بالا به این صورت خواهد بود:

The first tuple elements before swapping are : 20 g 17.5
The second tuple elements before swapping are : 10 f 15.5
The first tuple elements after swapping are : 10 f 15.5
The second tuple elements after swapping are : 20 g 17.5

5. تابع ()tie: کار این تابع، بازکردن مقادیر tuple در متغیر‌های جداگانه است. 2 ()tie متفاوت وجود دارد، با ignore  و بدون ignore، درواقع ignore، یک عنصر tuple خاص را نادیده می‌گیرد و جلوگیری می‌کند از آن عنصر برای باز‌شدن.

قطعه‌کُد زیر را برای درک بهتر این تابع، مشاهده کنید:

// C++ code to demonstrate working of tie()
#include<iostream>
#include<tuple> // for tie() and tuple
using namespace std;
int main()
{   
    // Initializing variables for unpacking
    int i_val;
    char ch_val;
    float f_val;   
      
    // Initializing tuple
    tuple <int,char,float> tup1(20,'g',17.5);
  
    // Use of tie() without ignore
    tie(i_val,ch_val,f_val) = tup1;
      
    // Displaying unpacked tuple elements
    // without ignore
    cout << "The unpacked tuple values (without ignore) are : ";
    cout << i_val << " " << ch_val << " " << f_val;
    cout << endl;
      
    // Use of tie() with ignore
    // ignores char value
    tie(i_val,ignore,f_val) = tup1;
      
    // Displaying unpacked tuple elements
    // with ignore
    cout << "The unpacked tuple values (with ignore) are : ";
    cout << i_val  << " " << f_val;
    cout << endl;
  
    return 0;
  
}

خروجی قطعه‌کُد بالا به این صورت خواهد بود:

The unpacked tuple values (without ignore) are : 20 g 17.5
The unpacked tuple values (with ignore) are : 20 17.5

6. تابع ()tuple_cat: این تابع 2 tuple را ترکیب و یک tupe جدید را برمی‌گرداند.

قطعه‌کُد زیر این موضوع را نشان می‌دهد:

// C++ code to demonstrate working of tuple_cat()
#include<iostream>
#include<tuple> // for tuple_cat() and tuple
using namespace std;
int main()
{
    // Initializing 1st tuple
    tuple <int,char,float> tup1(20,'g',17.5);
  
    // Initializing 2nd tuple
    tuple <int,char,float> tup2(30,'f',10.5);
      
    // Concatenating 2 tuples to return a new tuple
    auto tup3 = tuple_cat(tup1,tup2);
      
    // Displaying new tuple elements
    cout << "The new tuple elements in order are : ";
    cout << get<0>(tup3) << " " << get<1>(tup3) << " ";
    cout << get<2>(tup3) << " " << get<3>(tup3) << " ";
    cout << get<4>(tup3) << " " << get<5>(tup3) << endl;
  
    return 0;
}

خروجی قطعه‌کُد بالا به این صورت خواهد بود:

The new tuple elements in order are : 20 g 17.5 30 f 10.5

منبع: وب سایت geeksforgeeks

نویسنده شوید
دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.