tuple Sınıfı
Sabit uzunlukta bir öğe dizisini sarmalar.
Sözdizimi
class tuple {
tuple();
explicit tuple(P1, P2, ..., PN); // 0 < N
tuple(const tuple&);
template <class U1, class U2, ..., class UN>
tuple(const tuple<U1, U2, ..., UN>&);
template <class U1, class U2>
tuple(const pair<U1, U2>&); // N == 2
void swap(tuple& right);
tuple& operator=(const tuple&);
template <class U1, class U2, ..., class UN>
tuple& operator=(const tuple<U1, U2, ..., UN>&);
template <class U1, class U2>
tuple& operator=(const pair<U1, U2>&); // N == 2
};
Parametreler
TN
N. tanımlama grubu öğesinin türü.
Açıklamalar
Sınıf şablonu, sırasıyla , ..., T2
TN
, türündeki T1
N nesnelerini depolayan bir nesneyi açıklar. Burada 0 <= N <= Nmax
. Tanımlama grubu örneğinin tuple<T1, T2, ..., TN>
kapsamı, şablon bağımsız değişkenlerinin sayısıdır N
. Şablon bağımsız değişkeninin Ti
dizini ve bu türe karşılık gelen depolanmış değeridir i - 1
. Bu nedenle, bu belgelerde türleri 1 ile N arasında saysak da, karşılık gelen dizin değerleri 0 ile N - 1 arasında değişir.
Örnek
// tuple.cpp
// compile with: /EHsc
#include <vector>
#include <iomanip>
#include <iostream>
#include <tuple>
#include <string>
using namespace std;
typedef tuple <int, double, string> ids;
void print_ids(const ids& i)
{
cout << "( "
<< get<0>(i) << ", "
<< get<1>(i) << ", "
<< get<2>(i) << " )." << endl;
}
int main( )
{
// Using the constructor to declare and initialize a tuple
ids p1(10, 1.1e-2, "one");
// Compare using the helper function to declare and initialize a tuple
ids p2;
p2 = make_tuple(10, 2.22e-1, "two");
// Making a copy of a tuple
ids p3(p1);
cout.precision(3);
cout << "The tuple p1 is: ( ";
print_ids(p1);
cout << "The tuple p2 is: ( ";
print_ids(p2);
cout << "The tuple p3 is: ( ";
print_ids(p3);
vector<ids> v;
v.push_back(p1);
v.push_back(p2);
v.push_back(make_tuple(3, 3.3e-2, "three"));
cout << "The tuples in the vector are" << endl;
for(vector<ids>::const_iterator i = v.begin(); i != v.end(); ++i)
{
print_ids(*i);
}
}
The tuple p1 is: ( 10, 0.011, one ).
The tuple p2 is: ( 10, 0.222, two ).
The tuple p3 is: ( 10, 0.011, one ).
The tuples in the vector are
( 10, 0.011, one ).
( 10, 0.222, two ).
( 3, 0.033, three ).
operator=
Bir tuple
nesne atar.
tuple& operator=(const tuple& right);
template <class U1, class U2, ..., class UN>
tuple& operator=(const tuple<U1, U2, ..., UN>& right);
template <class U1, class U2>
tuple& operator=(const pair<U1, U2>& right); // N == 2
tuple& operator=(tuple&& right);
template <class U1, class U2>
tuple& operator=(pair<U1, U2>&& right);
Parametreler
BM
Kopyalanan N. tanımlama grubu öğesinin türü.
Doğru
Kopyalanacak tanımlama grubu.
Açıklamalar
İlk iki üye işleç, sağ öğelerini öğesine karşılık gelen öğelerine *this
atar. Üçüncü üye işleci, 0 *this
dizinindeki öğesine ve right.second
dizin 1'deki öğesine atarright.first
. Üç üye işleç de döndürür *this
.
Geri kalan üye işleçleri öncekilere benzeticidir, ancak Rvalue Başvuru Bildirimcisi: &.
Örnek
// std__tuple__tuple_operator_as.cpp
// compile with: /EHsc
#include <tuple>
#include <iostream>
#include <utility>
typedef std::tuple<int, double, int, double> Mytuple;
int main()
{
Mytuple c0(0, 1, 2, 3);
// display contents " 0 1 2 3"
std::cout << " " << std::get<0>(c0);
std::cout << " " << std::get<1>(c0);
std::cout << " " << std::get<2>(c0);
std::cout << " " << std::get<3>(c0);
std::cout << std::endl;
Mytuple c1;
c1 = c0;
// display contents " 0 1 2 3"
std::cout << " " << std::get<0>(c1);
std::cout << " " << std::get<1>(c1);
std::cout << " " << std::get<2>(c1);
std::cout << " " << std::get<3>(c1);
std::cout << std::endl;
std::tuple<char, int> c2;
c2 = std::make_pair('x', 4);
// display contents " x 4"
std::cout << " " << std::get<0>(c2);
std::cout << " " << std::get<1>(c2);
std::cout << std::endl;
return (0);
}
0 1 2 3
0 1 2 3
x 4
swap
İki tanımlama grubunun öğelerini değiştirir.
template <class... Types>
void swap(tuple<Types...&> left, tuple<Types...&> right);
Parametreler
Sol
Öğeleri, tanımlama grubu sağındaki öğelerle değiştirilecek bir tanımlama grubu.
Doğru
Öğeleri soldaki tanımlama grubuyla değiştirilecek bir tanımlama grubu.
Açıklamalar
işlevi yürütür left.swap(right)
.
tuple
Bir tuple
nesne oluşturur.
constexpr tuple();
explicit constexpr tuple(const Types&...);
template <class... UTypes>
explicit constexpr tuple(UTypes&&...);
tuple(const tuple&) = default;
tuple(tuple&&) = default;
template <class... UTypes>
constexpr tuple(const tuple<UTypes...>&);
template <class... UTypes>
constexpr tuple(tuple<UTypes...>&&);
// only if sizeof...(Types) == 2
template <class U1, class U2>
constexpr tuple(const pair<U1, U2>&);
template <class U1, class U2>
constexpr tuple(pair<U1, U2>&&);
Parametreler
BM
Kopyalanan N. tanımlama grubu öğesinin türü.
Doğru
Kopyalanacak tanımlama grubu.
Açıklamalar
İlk oluşturucu, öğeleri varsayılan olarak örülen bir nesne oluşturur.
İkinci oluşturucu, öğeleri , , P2
... PN
bağımsız değişkenlerinden P1
kopyalanmış bir nesne oluşturur ve her Pi
birinin öğesi dizininde i - 1
başlatılır.
Üçüncü ve dördüncü oluşturucular, öğeleri sağın ilgili öğesinden kopyalanmış bir nesne oluşturur.
Beşinci oluşturucu, 0 dizinindeki öğesi öğesi öğesinden right.first
oluşturulmuş ve dizin 1'deki öğesi öğesinden right.second
oluşturulmuş olan bir nesnesi oluşturur.
Kalan oluşturucular öncekilere benzeticidir, ancak Rvalue Başvuru Bildirimcisi: &.
Örnek
// std__tuple__tuple_tuple.cpp
// compile with: /EHsc
#include <tuple>
#include <iostream>
#include <utility>
typedef std::tuple<int, double, int, double> Mytuple;
int main()
{
Mytuple c0(0, 1, 2, 3);
// display contents "0 1 2 3"
std::cout << std::get<0>(c0) << " ";
std::cout << std::get<1>(c0) << " ";
std::cout << std::get<2>(c0) << " ";
std::cout << std::get<3>(c0);
std::cout << std::endl;
Mytuple c1;
c1 = c0;
// display contents "0 1 2 3"
std::cout << std::get<0>(c1) << " ";
std::cout << std::get<1>(c1) << " ";
std::cout << std::get<2>(c1) << " ";
std::cout << std::get<3>(c1);
std::cout << std::endl;
std::tuple<char, int> c2(std::make_pair('x', 4));
// display contents "x 4"
std::cout << std::get<0>(c2) << " ";
std::cout << std::get<1>(c2);
std::cout << std::endl;
Mytuple c3(c0);
// display contents "0 1 2 3"
std::cout << std::get<0>(c3) << " ";
std::cout << std::get<1>(c3) << " ";
std::cout << std::get<2>(c3) << " ";
std::cout << std::get<3>(c3);
std::cout << std::endl;
typedef std::tuple<int, float, int, float> Mytuple2;
Mytuple c4(Mytuple2(4, 5, 6, 7));
// display contents "4 5 6 7"
std::cout << std::get<0>(c4) << " ";
std::cout << std::get<1>(c4) << " ";
std::cout << std::get<2>(c4) << " ";
std::cout << std::get<3>(c4);
std::cout << std::endl;
return (0);
}
0 1 2 3
0 1 2 3
x 4
0 1 2 3
4 5 6 7
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin