Главная страница Случайная страница Разделы сайта АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
💸 Как сделать бизнес проще, а карман толще?
Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое раписание, но и напоминать клиентам о визитах тоже.
Проблема в том, что средняя цена по рынку за такой сервис — 800 руб/мес или почти 15 000 руб за год. И это минимальный функционал.
Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.⚡️ Для новых пользователей первый месяц бесплатно. А далее 290 руб/мес, это в 3 раза дешевле аналогов. За эту цену доступен весь функционал: напоминание о визитах, чаевые, предоплаты, общение с клиентами, переносы записей и так далее. ✅ Уйма гибких настроек, которые помогут вам зарабатывать больше и забыть про чувство «что-то мне нужно было сделать». Сомневаетесь? нажмите на текст, запустите чат-бота и убедитесь во всем сами! Списки инициализации
Давайте рассмотрим следующий пример: vector< double> v = { 1, 2, 3.456, 99.99 }; list< pair< string, string> > languages = { {" Nygaard", " Simula" }, {" Richards", " BCPL" }, {" Ritchie", " C" } }; map< vector< string>, vector< int> > years = { { {" Maurice", " Vincent", " Wilkes" }, {1913, 1945, 1951, 1967, 2000} }, { {" Martin", " Ritchards" } {1982, 2003, 2007} }, { {" David", " John", " Wheeler" }, {1927, 1947, 1951, 2004} } };
Теперь списки инициализации могут использоваться не только для массивов. Механизмом доступа к {}-списку является функция (в большинстве случаев конструктор), принимающая в качестве аргумента std:: initializer_list< T>. Например: void f(initializer_list< int>); f({1, 2}); f({23, 345, 4567, 56789}); f({}); // пустой список f{1, 2}; // ошибка: пропущен вызов метода () years.insert({{" Bjarne", " Stroustrup" }, {1950, 1975, 1985}});
Список инициализации может быть произвольной длины, но должен быть однородным (все элементы должны быть такого же типа, что указан в качестве параметра шаблона (std:: initializer_list< T>), или же должны преобразовываться к T). Контейнер может реализовывать конструктор, принимающий список инициализации следующим образом: template< class E> class vector { public: // конструктор, принимающий список инициализации vector (std:: initializer_list< E> s) { // выделить нужное количество памяти reserve(s.size()); // проинициализировать элементы в диапазонеelem[0: s.size())) uninitialized_copy(s.begin(), s.end(), elem); sz = s.size(); // установить размер вектора } //... как и было... };
Различия между непосредственной инициализацией и инициализацией копирования сохраняется и в случае использования списков инициализации, но в этом случае разница менее существенна. Например, у std:: vector есть явный (explicit) конструктор, принимающий int и принимающий список инициализации:
Функция может использовать initializer_list как неизменяемую последовательность. Например: void f(initializer_list< int> args) { for (auto p=args.begin(); p! =args.end(); ++p) cout < < *p < < " \n"; }
Конструктор, принимающий единственный аргумент типа std:: initializer_list называется конструктором со списком инициализации (initializer-list constructor). Контейнеры стандартной библиотеки, такие как string и regex содержат конструкторы, операторы присваивания и т.д., принимающие списки инициализации. Списки инициализации могут использоваться в качестве диапазонов значений, например, в range-for операторе. См. также:
|