Boost C Tuple библиотека - статични контейнери

Типът кортеж (или н-кортеж) това колекция елементи с фиксиран размер (вижте други дефиниции). Двойки (p airs), тройки, четворки и така нататък са всички обекти от тип кортежи. В езика за програмиране кортежът е обект на данни, който съдържа други обекти като елементи. Тези елементи могат да бъдат от различен тип.

Използването на тип t uple е удобно при различни условия. Например, типът кортеж улеснява създаването на функция, която връща повече от една стойност.

Някои езици за програмиране като ML, Python и Haskell имат вградена поддръжка за кортеж. За съжаление езикът C ++ няма такава поддръжка. Увеличете библиотеката. Tuple съдържа изпълнението на типа кортеж чрез шаблони.

Бележка на преводача: при превод на дума кортеж използвахме доста утвърден термин кортеж вместо несръчна калка тъп .

Съдържание

Допълнителни детайли

Разширени функции (описани са някои метафункции и др.).

Използване на библиотеката

За да използвате библиотеката, просто включете реда:

Сравнителните оператори също могат да бъдат свързани по този начин:

Да се ​​използват I/O оператори за кортежи,

Заглавките tuple_io.hpp и tuple_comparison.hpp включват и tuple.hpp .

Видове ортези

Кортеж се получава чрез инстанциране на шаблона на кортеж. Параметрите на този шаблон указват видовете съхранявани елементи. Текущата версия поддържа кортежи, съдържащи 0 до 10 елемента. Ако е необходимо, горната граница може да бъде увеличена до, да речем, няколко десетки. Съхраненият елемент може да бъде от всякакъв тип C ++. Имайте предвид, че void и normal функции са валидни типове C ++, но обектите от тези типове не могат да съществуват. Следователно, ако кортежът съдържа такива типове елементи, тогава обект от тип кортеж може да съществува, но обектите от съответните типове елементи не могат. Има естествени ограничения за типовете елементи, които не могат да бъдат копирани или не могат да бъдат конструирани по подразбиране (вижте по-долу „Изграждане на кортеж“) .

Конструиране на кортежи

Конструкторът на кортеж приема елементите на кортежа като аргументи. За н-елементарни колекции, можете да извикате конструктор с редица аргументи к, където 0

Възможно е да се декларира тип кортеж, за който даден обект не може да бъде изграден. Това се случва, ако елементът, който не може да бъде инициализиран, има по-нисък индекс от елемента, който трябва да бъде инициализиран. Например кортеж .

В резултат кортежът по същество е просто група от отделни елементарни конструкции.

Кортежи могат да бъдат създадени с помощта на помощната функция make_tuple (сравнете std: make_pair). Това прави създаването на кортежи по-удобно, като премахва необходимостта от изрично деклариране на типове елементи:

По подразбиране типовете елементи се прехвърлят към прости нереферирани типове. Например:

Извикването Make_tuple връща обект на колекция от тип кортеж .

Аргументът на масива във функцията make_tuple по подразбиране се прехвърля към постоянна препратка, така че масивите не трябва да се обгръщат с функцията cref. Например:

Този код създава обект от тип кортеж (имайте предвид, че типът на низов литерал е масив от константни символи, а не const char *). За да принудите функцията make_tuple да създаде кортеж с непостоянен елемент на масив, можете да използвате ref обвивката .

Функционалните указатели се подават към прост нереферентен тип, т.е. към прост функционален указател. Кортеж също може да съхранява препратка към функция, но такъв кортеж не може да бъде конструиран с помощта на функцията make_tuple (тъй като резултатът е постоянен тип функция, което не е разрешено):

Достъп до елементи в ортеж

Елементите на кортеж са достъпни с помощта на израза: или

където t е обект от тип кортеж, а N е целочислен константен израз, който указва индекса на елемента в кортежа. В зависимост от това дали обектът t е квалифициран като константа или не, get връща N-ия елемент като постоянна или непостоянна референция. Индексът на първия елемент е 0, така че N трябва да бъде в диапазона от 0 до (включително) k-1, където k е броят на елементите в кортежа. Нарушенията на тези ограничения се откриват по време на компилиране. Примери: