19просмотров
23 ноября 2023 г.
Score: 21
#include <iostream>
#include <string>
#include <tuple>
using namespace std;
//Существует такая вещь, как 'tuple' (кортежи) в языке программирования C++. Они представляют собой контейнеры, позволяющие хранить элементы разных типов данных в упорядоченной последовательности.
//Для создания кортежа tuple необходимо объявить типы данных, которые будут содержаться в нем. Например, можно создать кортеж следующим образом: tuple<int, string, bool> tupleOne = make_tuple(5, "Имя", true). Однако, я хочу показать вам еще другой способ, используя ключевое слово typedef. Обратите внимание, что вы можете заменить повторяющуюся часть tuple<int, string, bool> своим собственным словом с помощью typedef. Давайте перейдем к практике
//Во-первых, перед использованием функции 'main()' необходимо объявить замену. typedef tuple<int, string, int> Tuple; //Теперь вы можете заменять 'tuple<int, string, int>'на 'Tuple', но здесь следует отметить, что если вам нужен tuple со значениями, например, <int, string, int, int>', то вы не сможете использовать `Tuple, поскольку он заменяет 'tuple<int, string, int>'. Это важно учесть. Также стоит отметить, что 'typedef' можно использовать в других случаях, а во всех остальных случаях можно заменить вектор и итераторы на то, что вам приходит в голову.
//Теперь давайте создадим 'tuple', но перед этим я хочу вам показать еще что-то.
int main(){ //Есть ключевое слово 'auto'. Когда объявляется переменная, указывается тип данных, имя переменной и значение. Например, 'int a = 10'. Однако, с использованием ключевого слова 'auto' можно позволить компилятору самому определить тип данных. Давайте рассмотрим примеры.
int a = 10; //Обычное объявление переменной auto b = 5; //А вот если использовать ключевое слово 'auto', компилятор сам определит тип данных. Однако, это ключевое слово работает только в том случае, когда переменной присваивается значение. Вы могли бы задать вопрос: зачем мне использовать ключевое слово 'auto', если я могу самостоятельно определить нужный тип данных? Но представьте себе ситуацию, когда у вас есть длинный код, и вы уже не помните, какой тип данных был нужен для конкретного значения. auto c = a; //Вот предположим, вы случайно присвоили значение переменной 'a' равное 10. Если это присваивание было где-то далеко в коде, то вам пришлось бы тратить много времени на отслеживание этой ошибки. Однако, если вы использовали ключевое слово 'auto', компилятор быстро определил бы тип данных для переменной, что значительно сэкономило ваше время. Стоит отметить, что ключевое слово 'auto' работает только при присваивании значения переменной. tuple<int,int,string,float>tupleOne(2,3,"Hello",3.5); //Вот обычный кортеж (tuple).
Tuple tupleTwo(3,"Word",6); //Вот кортеж (tuple) с использованием typedef. //Например, если я хочу получить "Hello" из второго элемента набора, как мне его вытащить? cout<<get<2>(tupleOne)<<endl;//Вывод:Hello //Давайте объединим все вместе, как показано в коде. auto getWord = get<1>(tupleTwo); //Даже здесь 'auto' удобна, потому что контейнер состоит из разных типов данных, и чтобы избежать необходимости проверять, какой тип выводить - 'int' или 'string', я использую 'auto'. cout<<getWord<<endl;//Вывод Word
}
/*Подведём итоги: Использование 'auto' экономит время, особенно если код длинный. 'typedef' также экономит время, особенно если вы пишете один и тот же код и хотите заменить его одним словом. 'tuple' - полезный контейнер. Кроме того, относительно 'tuple<int,int,string,float> int', если первым стоит 'int', то первым в контейнере должны быть данные типа данных 'int'. Если третьим стоит 'string', то третьим должна быть строка. Думаю, логика понятна. Чтение книг и документации рекомендуется для углубленного понимания. Идите и читайте, я не ваш учи