Using namespace std;

В C++ пространство имен (namespace) — это механизм, который позволяет группировать идентификаторы (например, переменные, функции, классы и т.д.) в отдельные области. Это помогает избежать конфликтов имен и упрощает организацию кода.
Стандартная библиотека C++ содержит множество полезных функций и классов, которые объединены в пространство имен std. Чтобы использовать эти функции и классы в своем коде, необходимо указывать префикс std:: перед каждым идентификатором. Например, чтобы вывести на экран сообщение, можно использовать следующий код:
***********************************************************************************************************
#include
***********************************************************************************************************
Здесь мы используем функцию std::cout из пространства имен std для вывода текста на экран. Обратите внимание на двоеточие и двойной слеш, которые указывают на принадлежность функции к пространству имен std.
Однако, если мы хотим использовать много функций и классов из пространства имен std, то придется каждый раз писать префикс std. Это может затруднить чтение и понимание кода, а также увеличить объем написанного текста. Чтобы избежать этого, можно использовать директиву «using namespace std;». Она позволяет использовать все идентификаторы из пространства имен std без указания префикса std.
Пример использования директивы «using namespace std;» выглядит следующим образом:
using namespace std;
Здесь мы указали, что будем использовать все идентификаторы из пространства имен std, и теперь можем обращаться к функции cout без указания префикса std. Такой код выглядит более компактно и легче читается.
Однако, необходимо быть осторожным при использовании директивы «using namespace std;», так как это может привести к конфликтам имен и ошибкам компиляции. Например, если у вас есть своя функция с именем cout, то при использовании директивы «using namespace std;» возникнет конфликт и компилятор не сможет определить, какую именно функцию cout использовать. Поэтому рекомендуется использовать директиву «using namespace std;» только внутри функций, а не в глобальной области видимости.
Также можно использовать частичную директиву «using», которая позволяет использовать только определенные идентификаторы из пространства имен std. Например, если мы хотим использовать только функцию cout и не хотим загромождать пространство имен другими идентификаторами из std, можно написать следующий код:
using std::cout;
***********************************************************************************************************
Здесь мы использовали частичную директиву «using», чтобы указать, что будем использовать только идентификатор cout из пространства имен std. Теперь можем обращаться к функции cout без указания префикса std.
В целом, использование директивы «using namespace std;» может упростить написание кода и сделать его более читаемым, но необходимо быть осторожным, чтобы избежать конфликтов имен и ошибок компиляции.
Кроме того, существуют и другие пространства имен, которые могут быть полезны при написании программ на C++. Например, пространство имен std::chrono содержит классы для работы со временем, а пространство имен std::vector содержит классы для работы с динамическими массивами. Также в стандартной библиотеке C++ есть множество других полезных классов и функций, которые могут быть использованы при написании программ.
Но про эти пространства имен мы поговорим в следующих постах.

58 постов 4.7K подписчиков
Подписаться Добавить пост
Правила сообщества
Соблюдайте правила Pikabu:
Помимо этого ЗАПРЕЩЕНО:
— Размещать в сообществе посты стиля «Подскажите как удалить вирус», «Подскажите как установить программу», «Подскажите как починить монитор/телевизор/мышь/тостер/стиральную машину» или «Напишите за меня лабу в универ». Пожалуйста размещайте такие посты вне этого сообщества или в соответствующих для этого сообществах.
9 месяцев назад
Но про эти пространства имен мы поговорим в следующих постах.
Нет спасибо, свалите плз с пикабу, ваш перепост первой главы учебника по плюсам никому не интересен и не нужен.
раскрыть ветку
9 месяцев назад
Полковник Фридрих Краус фон Циллергут (Циллергут— название деревушки в Зальцбурге, которую предки полковника пропили еще в восемнадцатом столетии) был редкостный болван. Рассказывая о самых обыденных вещах, он всегда спрашивал, все ли его хорошо поняли, хотя дело шло о примитивнейших понятиях, например: «Вот это, господа, окно. Да вы знаете, что такое окно?» Или: «Дорога, по обеим сторонам которой тянутся канавы, называется шоссе. Да-с, господа. Знаете ли вы, что такое канава? Канава — это выкопанное значительным числом рабочих углубление. Да-с. Копают канавы при помощи кирок. Известно ли вам, что такое кирка?»
Он страдал манией все объяснять и делал это с воодушевлением, с каким изобретатель рассказывает о своем изобретении.
«Книга, господа, это множество нарезанных в четвертку листов бумаги разного формата, напечатанных и собранных вместе, переплетенных и склеенных клейстером. Да-с. Знаете ли вы, господа, что такое клейстер? Клейстер — это клей».
Полковник был так непроходимо глуп, что офицеры, завидев его издали, сворачивали в сторону, чтобы не выслушивать от него такой истины, что улица состоит из мостовой и тротуара и что тротуар представляет собой приподнятую над мостовой панель вдоль фасада дома. А фасад дома — это та часть, которая видна с мостовой или с тротуара. Заднюю же часть дома с тротуара видеть нельзя, в чем мы легко можем убедиться, сойдя на мостовую.
раскрыть ветку
9 месяцев назад
Я сам кодер, но не понимаю, нахрена на этом сайте эта информация?
раскрыть ветку
9 месяцев назад
Совсем кукуха от вашего кодинга улетела? Тут вам не хабр, тут люди деградировать заходят, а не эти ваши шаблоны и векторы учить! Обмажутся своим страуструпом и мемсетят с кастомными аллокаторами друг друга в дебаге.
раскрыть ветку
9 месяцев назад
«Обратите внимание на двоеточие и двойной слеш,» а где там слэш то? Слэш это как я понимаю ‘/’
раскрыть ветку
Похожие посты
8 часов назад

Клиент вероятно не совсем доволен

Поддержать
9 часов назад

Главное красиво рассказать, а там разберемся

Показать полностью 1
Поддержать
1 день назад

Невероятно, может архивы неполные

1 день назад

«Ты должен был возглавить проект, а не покинуть его!»

Поддержать
2 дня назад

Пацан к успеху шёл, не получилось, не фартануло

1 месяц назад

Куда могло исчезнуть дисковое пространство? (2/5)
Разрежённые файлы (файлы с «дыркой»)
Другая проблема может появиться, например, во время создания бэкапа:

Тут возникает вопрос. А как из каталога размером 12 мегабайт получился архив на 426 мегабайт, который занял всё место?
Давайте глянем, какой самый большой файл располагается в каталоге /var/lib/docker:
Интересно, откуда у нас образовался 100 гиговый файл на разделе размером в 5 гигабайт?

Наиболее вероятно, дальнейшее гугление симптомов приведёт вас на страничку wiki, посвящённую разрежённым файлам. И да, здесь мы имеем дело именно с ними (Unix — Профессиональное программирование, стр 157, или М.Керриск — Linux API исчерпывающее руководство, стр. 118).
Да, в описываемом случае Docker использовал в качестве драйвера хранилища Devicemapper, который на данный момент устарел (рекомендуется использовать или overlay2 или fuse-overlayfs для rootless режима). Однако в целом использование разрежённых файлов довольно распространённое решение для хранения файловых систем в файлах, поэтому для devicemapper оно не уникально, и может встречаться достаточно часто.
- Большинство современных файловых систем поддерживают разрежённые файлы. Полный список доступен на вики.
- Разрежённые файлы — это файлы которые не используют блоки до тех пор, пока туда не будут записаны данные.
- Разрежённые файлы легко могут быть найдены с помощью однострочника:


указывает что нужно искать на машине все объекты с типом файл

Эта часть распечатает «разреженность» файла и его полное имя.
На этом этапе вывод будет выглядеть примерно так:

Если первое число меньше 1.0, то файл считается «разреженным».
Дальше мы фильтруем вывод с помощью awk:

и получаем список разрежённых файлов.
- Файлы можно конвертировать в разрежённые и обратно
- Некоторым утилитам (tar, rsync) нужно передать дополнительные аргументы (например «—sparse» для tar) для работы с разрежёнными файлами
Показать полностью 6
4 месяца назад

Готовлю для вас интересный материал по созданию 2D персонажа через нейронки, а пока делюсь наработками. Ссылка на саму неросеть внизу поста

Удачные варианты — партия №1

Удачные варианты — партия №2

Милые варианты — партия №1

Данные персонажи создаются через нейронку Stable Diffusion. Использовал инструменты с сайта OpenArt. За основу взят вот этот товарищ:

Пока что экспериментирую, собираю получившиеся варианты. В дальнейшем буду вырезать понравившиеся детали и как в конструкторе собирать новые образы для анимации в Dragon Bones.
Подпишись, чтобы увидеть итог эксперимента!
Показать полностью 4
6 месяцев назад

Как определить угловой размер в компьютерных играх
Всем доброго времени суток
Когда возникает желание что-то посчитать в игре, то нередко приходится определять размеры объектов по их изображению, то есть иметь дело с угловыми размерами объектов. Например, есть за картой звездолет и хочется узнать, насколько он большой. Для этого как раз нужно в том числе и определять его угловой размер. Что это такое и как его найти и будет рассказано в этом посте
Что такое угловой размер
Угловой размер — это мера того, насколько большим мы видим объект. И пожалуй объясню это на примере
Представьте, что вы стоите напротив шара диаметром 3 метра и смотрите на него. Сперва вы смотрите на него с расстояния в 1 метр, затем отходите подальше и смотрите уже с 4 метров. Сам шар размеры свои не изменил, однако для вас он стал меньше, потому что вы удалились. И вот как раз то, насколько большим вы его видите, угловой размер и показывает:

Естественно, угловой размер связан не с самим шаром, а с диаметром круга, который мы видим (изображение шара для глаза — это круг). Ну то есть в общем случае он связан с отрезком, который видит человек, камера или персонаж в игре
Как строится изображение
Предупреждение: так как я не занимаюсь разработкой видеоигр, то могу не могу быть полностью уверен в данной математической модели. Если она ошибочна в общем случае, то прошу указать об этом в комментариях
Спроецируем все объекты, которые мы можем увидеть из некоторой точки на какую-то поверхность. Вот только на какую? Так как по любому направлению проецироваться объекты должны одинаково, то очевидным будет сделать проекцию на сферу, в центре которой находится наблюдатель. На этой сфере находятся все объекты, которые может увидеть наблюдатель, изменяя только направление своего взгляда. Естественно, из-за ограниченного угла обзора наблюдатель видит только часть этой сферы
Однако мониторы прямоугольные и, в основном, плоские, поэтому теперь видимый кусок сферы нужно спроецировать на прямоугольник. Отсечем от сферы те части, которые наблюдатель не видит, а из концов отрезанного куска проведем прямые, пересекающиеся в центре. На этих отрезках и будет лежать прямоугольник, и для удобства его можно построить прямо на концах куска сферы:

Зеленая плоскость — это как раз плоскость монитора
И теперь, чтобы спроецировать некоторую точку на плоскость монитора, проведем прямую от этой точки на сфере до центра сферы. Точка пересечения с плоскостью и будет проекцией точки на эту плоскость. Кстати, такой метод проецирования объясняет, почему по краям изображение растягивается
Находим угловые размеры
Пусть есть какой-то отрезок, который находится в поле зрения наблюдателя. Проведем прямые из концов этого отрезка в центр сферы. Угол между прямыми как раз и будет угловым размером этого отрезка. Теперь пересекаем эти прямые с плоскостью монитора и получаем концы отрезка уже на изображении. И теперь, если нам известны точки, которыми отрезок ограничен, то мы можем определить угловой размер. Как это сделать?
Сперва введем 2 системы координат: одна 3-мерная, из центра сферы, другая 2-мерная, связанная с плоскостью монитора:

Здесь L — длина изображения в пикселях, D — высота, что, впрочем, видно и по рисунку. Также здесь у нас появилась неизвестная H, которую надо бы найти. Рассекаем объекты с рисунка плоскостью xOy и, соединяя с началом координат края сечения монитора получим следующую картину:

Так как начало координат находится ровно над центром монитора, то мы получаем равнобедренный треугольник. Теперь можем из FOV-а (угла обзора) и длины изображения выразить неизвестную:

Изначально мы будем знать координаты точки в системе координат монитора (например, координата пикселя в Paint-е), поэтому из них определим координаты уже в системе Oxyz для некоторой точки:

Не забываем, что Oxyz находится над центром монитора
Теперь вернемся к исходной картинке, нанесем на плоскость точки A и B, которые будут границами нашего отрезка и проведем вектора из наблюдателя (нуля Oxyz) в эти точки:

Напомню, что эти векторы лежат на прямых, угол между которыми нужно найти. А значит нужно найти угол между векторами. Тут же напрашивается скалярное произведение этих векторов, поэтому не будем изобретать велосипед и воспользуемся им:


Вторая картинка — та же формула, но с записью обозначений, чтобы ее можно было сохранить и потом быстро ею воспользоваться
Ну и что ж, вот конечная формула. Определяем координаты пикселей, разрешение и угол обзора, подставляем в формулу и получаем угловой размер. Однако такая формула выглядит довольно громоздко, поэтому я решил написать небольшую консольную программу, которая сможет считать угловые размеры. Оставлю здесь ссылку для скачивания на Яндекс диск, а также код самой программы, вдруг кто захочет разобраться в ней:

Ну а на этом все, удачи вам в расчетах и вычислениях)
Показать полностью 10
7 месяцев назад
Парсим яндекс диск при помощи Python
В данный момент я работаю контент-менеджером в «крупном» интернет — магазине. В моём случае, это больше 100 000 позиций.
Иногда приходится сталкиваться с такой проблемой: поставщик присылает фотографии со ссылками на яндекс диск. Это крайне неудобно, потому что приходится ходить по каждой ссылке и скачивать изображение к себе, а затем уже загружать на сервер и т.д.
Готового решения я не нашел и решил написать свою реализацию работы с яндекс диском. Хорошо, что я знаю python.
У меня было 2 версии программы:
- когда по ссылке находится папка с картинками, python скачивает эту папку как зип файл, затем распаковывает. Все манипуляции записываются в csv файл, путь до файла с картинками
- когда по ссылке идёт только одна картинка, в данном случаи все немного проще, не нужны лишние действия с распаковкой картинок
p.s. ещё были 2 побочные небольшие программки: 1-я для уменьшения размера картинки, 2-я для переименования картинок (менялся пробел на дефис)
Приступим к реализации
- скачать и установить python c официального сайта https://www.python.org/downloads
- открыть любимый редактор кода (я использую vscode) https://code.visualstudio.com
- подключить следующие стандартные библиотеки: urllib.parse, csv, os, zipfile. Установить библиотеку requests https://pypi.org/project/requests/ (для отправки запроса на сервер)
- для полного фен-шуя можно использовать виртуальное окружение, дабы не засорять систему ненужными пакетами. Подробнее о virtualenv можно ознакомится по ссылке https://docs.python.org/3/tutorial/venv.html или же использовать poetry.
Ссылки на яндекс диск имеют вид: https://disk.yandex.ru/d/xNBn7lE1_Y5knQ . Чтобы их можно было скачать, они должны быть публичными.
Обратимся к API яндекс. После ключа public_key=»вставляем_ссылку_на_файл»
В ответе мы получаем json, из которого нам нужно получить значение по ключу href. Полученное значение и будет нашей прямой ссылкой к файлу.

Пожалуй, на этом хватит теории, теперь, постараюсь внятно объяснить, как всё это можно применить в контексте python.
# создаем новый файл и подключаем нужные нам библиотеки
import requests
from urllib.parse import urlencode
import csv
import os
import zipfile
Для начало создадим функцию, которая будет возвращать нам ссылку для скачивания:
final_url = base_url + urlencode(dict(public_key=public_link))
response = requests.get(final_url)
parse_href = response.json()[‘href’]
return parse_href
Файлы могут быть в разных форматах: ссылки могут быть на одну или несколько картинок. В первом случае можно напрямую скачивать картинку по ссылке. Во втором, если по ссылке несколько картинок, то при скачивании мы получаем архив, который требует дополнительных действий (распаковку).
Далее, мы скачиваем файлы и в зависимости от его типа выполняем действия: просто записываем в результирующий файл или же переходим к его распаковке с последующей записью.
В итоге, мы получаем файл result_data.csv со ссылками на фотографии на нашем жестком диске:

В добавок, у нас на жёстком диске появляется папка со скаченными картинками в папке download_files.
Полностью посмотреть код можно в репозитории на гитхаб.
p.s. Официальная документация по API Яндекс. Диска
Братишка с пикабу подсказал готовую библиотеку на питоне. Спасибо b4ro тык.
p.s.s. Немного поразмышляв, я подумал, что неплохо было бы написать, тесты. Пройтись линтером по коду. Добавить функцию переименования файлов. Может быть что-нибудь ещё?)
Спасибо за прочтение! Комментарии, лайки, дизлайки, предложения, пожелания крайне приветствуются.
Показать полностью 2
7 месяцев назад

Как создать ИИ-кавер с помощью нейросети: генерация несуществующих песен с голосами знаменитых артистов
В социальных сетях стали популярны несуществующие песни, созданные при помощи нейросетей. В апреле этого года пользователь ghostwriter977 загрузил на Spotify трек Heart on My Sleeve, который набрал более миллиона прослушиваний. Звучание песни было похоже на исполнение The Weeknd и Дрейка, но на самом деле её создала нейросеть. Эта история разошлась по миру, но позже трек был удалён по требованию правообладателя Universal.
Тем не менее, в социальных сетях продолжают появляться другие каверы: голосом Фредди Меркьюри была исполнена песня Imagine Dragons, а Канье Уэст «спел» Just The Two of Us. Тренд распространился и на рунет: песни стали перепевать голосами Доры и Элджея. А ИИ-каверы от нейро-Моргенштерна произвели фурор в TikTok.
Если вы тоже хотите создать свой собственный ИИ-кавер, то мы подскажем как это сделать. За полчаса или за 5 минут вы можете создать свою собственную песню, которая будет звучать как исполнение ваших любимых артистов, благодаря нейросети.
В марте 2023 года китайские разработчики выложили на GitHub нейросеть SoftVC VITS Singing Voice Conversion, известную онлайн как so-vits-svc. Эта нейросеть может имитировать певцов и создавать новые песни с их голосами. Алгоритм был разработан энтузиастами и доступен для всех, но чтобы запустить его локально, нужны знания программирования и мощный компьютер.
Чтобы не тратить время на программирование и не заниматься обучением модели, можно воспользоваться нейросетью на Google Collab. За полчаса вы можете создать полностью готовый ИИ-кавер. Процесс генерации песни с голосом исполнителя, чью модель выложили в открытый доступ, не требует специальных знаний.
Как создать трек в нейросети so-vits-svc с помощью Google Collab: генерация ИИ-каверов
Шаг 1. Выберите песню, которую будет исполнять сгенерированный голос, и скачайте её в формате mp3. Для успешной генерации также понадобится инструментал и голос оригинального певца.
Учтите, что музыка защищена авторским правом, поэтому коммерческое использование может привести к удалению вашего сгенерированного трека с платформ. Выбирайте песни, доступные по лицензии Creative Commons.
Шаг 2. Разделите трек на а капеллу и минус. Для этого загрузите mp3-файл на сайт x-minus. Зеленая дорожка будет содержать а капеллу, а синяя — минус. Скачайте полученные файлы и переименуйте их для удобства.

Шаг 3. Конвертируйте файл с а капеллой из формата mp3 в wav. Это можно сделать с помощью бесплатной программы Audacity или онлайн-конвертера cloudconvert.
Шаг 4. Перейдите по ссылке на so-vits-svc, веб-интерфейс нейросети, запускаемый на Google Collab. Этот сервис позволяет бесплатно запускать код на вычислительных мощностях других пользователей, но при этом есть ограничения: каждый раз нужно ждать загрузки библиотек и моделей.
Вы также можете использовать другие интерфейсы, но мы не можем гарантировать, что они будут работать так же хорошо. Эта инструкция написана для so-vits-svc, поэтому в других веб-интерфейсах порядок действий может отличаться.
Шаг 5. Для того чтобы записать песню с использованием нейросети, необходимо выполнить ряд предварительных действий. Войдите в свой аккаунт Google или создайте новый, так как для работы с Google Collab требуется авторизация.
Шаг 6. Последовательно запустите следующие ячейки: Check GPU, Setup 1, Setup 2, Download ContentVec, и Setup HF Downloads. Нажмите на кнопку «Play» рядом с каждым заголовком для запуска кода. Когда загрузка завершится, появится зеленая галочка около названия ячейки. Следующую ячейку нужно запускать только после полной загрузки предыдущей — если пропустить одну из строк, программа не сработает.
Наибольшее время занимает загрузка Setup 1, которая может занять до 10 минут. Остальные ячейки загружаются за несколько секунд. Загружать код для каждого трека не нужно — достаточно сделать это один раз. Обратите внимание, что через 2 часа код автоматически сбросится, и все действия придется повторить.

Шаг 7. Выберите голос, который будет использоваться для создания песни. Для этого найдите поле model_url под заголовком Other Downloads (.zip) Step o.1 и добавьте в него ссылку на папку с моделью голоса. Вы можете выбрать голос из списка доступных в этой же ячейке, например, Канье Вест, Кендрик Ламар или Дрейк. Также можно использовать библиотеку голосов на huggingface и скопировать ссылку на нужную папку оттуда. Доступны голоса российских исполнителей, таких как Oxxxymiron или Моргенштерн. Обратите внимание, что Мирон Федоров, выступающий под именем Oxxxymiron, и Алишер Моргенштерн внесены Минюстом в реестр иноагентов. Нейросеть поддерживает ссылки на любые заархивированные папки с Google Drive, MEGA, huggingface и других ресурсов. Вы можете использовать любую модель, которую найдете в интернете.

Шаг 8. Запустите еще одну ячейку с кодом — Extract.zip Downloads — Step o.2. Дождитесь завершения загрузки.

Шаг 9. Нажмите на иконку папки и перетащите в нее аудиофайл с а капеллой в формате wav, который вы подготовили на третьем шаге. Загрузка файла может занять несколько минут — длительность зависит от длины файла. Когда загрузка завершится, запустите код.
Шаг 10. Нажмите на кнопку «Convert». После этого появится плеер со сгенерированным голосом. Скачайте готовый трек, нажав правой кнопкой мыши на плеере. Если плеер не появился, то загрузите последний файл в папке слева. Обратите внимание, что на этом этапе могут возникнуть ошибки. Их причиной может быть выбор нерабочей модели или использование слишком длинной а капеллы. Проверьте правильность ввода текста и настройки языка, а также убедитесь в стабильности интернет-соединения.
Шаг 11. После того, как вы получили готовый трек, откройте любой аудиоредактор, например, бесплатную программу Audacity или онлайн-сервис veed.io. Совместите минус со сгенерированной а капеллой. При этом могут пригодиться навыки мастеринга и сведения музыки, если они у вас есть.
Как создать трек на сайте musicfy: простой способ без использования Google Collab
Этот метод гораздо проще, чем использование Google Collab, однако есть определенные ограничения. На сайте musicfy доступны только готовые пресеты голосов, поэтому добавить свой голос туда не получится.
Чтобы создать трек на сайте musicfy, выполните следующие шаги:
Шаг 1. Скачайте песню в формате mp3.
Шаг 2. Разделите трек на капеллу и минус. Для этого перейдите на сайт x-minus, загрузите там mp3 файл и скачайте полученные аудиофайлы.
Шаг 3. Перейдите на сайт musicfy. Войдите через свой Google-аккаунт и нажмите кнопку «Create a song». Загрузите в поле mp3-файл с капеллой или запишите свой голос.
Если файл не загружается, прокрутите страницу вниз, возможно появится сообщение об ошибке «Audio file is corrupted, please try uploading another file». Попробуйте загрузить файл еще раз.

Шаг 4. Выберите один из готовых голосов. На сайте доступны вокалы множества исполнителей, например, Арианы Гранде, Дрейка, Граймса, Канье Уэста, Трэвиса Скотта и других. Также можно выбрать персонажей мультфильмов, таких как Губка Боб Квадратные Штаны или Питер Гриффин. Все эти голоса могут использоваться для записи русскоязычного текста.
Шаг 5. Нажмите кнопку «Convert». После обработки скачайте готовый файл. Если появляется ошибка, попробуйте еще раз.
Шаг 6. Совместите минус и сгенерированную капеллу в любом аудиоредакторе, например, бесплатной программе Audacity или онлайн-сервисе veed.io. Сохраните получившийся трек и наслаждайтесь своим творением!

Как выбрать способ генерации трека?
Один из вариантов — использование нейросети в Google Collab, которая позволяет создавать треки сотней голосов пользователей. Однако, этот метод затратен по времени и может выдавать ошибки, при этом не предоставляя ясной информации о причинах возникновения проблем. Чтобы их решить, иногда нужно искать помощь на форумах или видео-ресурсах, что может занять много времени.
В отличие от этого, Musicfy позволяет легко генерировать треки без запуска кода и вероятности ошибок, а также без необходимости конвертирования аудиофайлов. Однако, на сайте доступен только ограниченный выбор голосов.
Подпишитесь на мой телеграм, там я рассказываю про нейронные сети и обучаю вас их использовать.
И еще парочка AI каверов, в качестве бонусного трека
Показать полностью 6 3
Поддержать
9 месяцев назад

Как получить доступ к Bing AI?
Bing c GPT-4 стал доступен всем. Больше не нужно сидеть в списке ожидания. Рассказываем, как воспользоваться новым ботом без регистрации и смс.
Инструкция, как воспользоваться:
- Включите VPN.
Из РФ, как обычно, не работает; - Откройте браузер Edge
Работает только через него. Edge — это браузер от Microsoft; - Войдите в учетную запись Microsoft;
- В этом браузере откройтеhttps://www.bing.com;
- В меню выберите «Чат» и нажмите «Присоединиться к списку ожидания»;
- Никакого ожидания не будет, вы сразу сможете воспользоваться ботом.

5 лет назад

Возрадуйтесь братья !

9 лет назад
Гайд по профессии «Программист 1с»
Доброго времени суток!
Сейчас в тренеде делать посты с фотками с места работы. По моему это не очень полезно и я решил начать новую тему, с гайдом по профессиям.
+ я пообещал это сделать в своем прошлом посте, слово нужно держать!
Для чего я это делаю и для кого
1. Для всех, для общего понимания, чем занимаются люди работающие на данной должности.
2. Для людей выбирающих кем пойти работать или желающих сменить сферу деятельности.
3. Для студентов и школьников, думающих о своем будущем, о карьере.
4. Для людей которые уже выбрали профессию «Программист 1с», но не понимающие с чего начать!
Почему я выбрал данную профессию:
1. Высокая зп как на начальном уровне так и в дальнейшем.
2. Быстрый вход (всего 1 месяц занятий дома и можно устроиться на работу).
3. Приближенность больше к бизнесу, чем к IT, т.е. есть возможность дорасти до директората и больше.
4. Хорошие курсы по обучению (бесплатные).
5. Много вакансий, на данный момент мест больше чем специалистов.
_________________________________________________________________________________
Кто может стать программистом 1c:
Любой! А как? Я расскажу ниже.
(Вам не нужно образование, определенный пол, возраст (люди начинали и в 50 лет и в 16)).
_________________________________________________________________________________
Для понимания к чему это все, поставлю цели которые Вы достигнете через год следуя моему гайду!
1. ЗП в размере от 100000 рублей (в Москве, к-нты регионов найдете сами).
2. Про интересную работу и прочее, решать каждому, п1 считаю достаточным для заинтересованности в дальнейшем!
__________________________________________________________________________________
Для понимания дальнейшего, пару терминов и определений.
1. 1c Предприятие — это платформа для создания приложений, в основном для задач бизнеса (учет, планирование, контроль, анализ).
2. В платформе есть 2 режима (для начала Вам достаточно).
— Конфигуратор — в нем работает программист.
— Предприятие — в нем работают пользователи.
3. На данный момент есть много приложений написанных на платформе, основные это:
— 1c Бухгалтерия — ведение бухгалтерского и налогового учета.
— 1с Зарплата и управление кадрами — из названия понятно.
— 1с Управление торговлей — учет хозяйственной деятельности торговой компании.
— 1с Управление производственным предприятием — это комплекс всех трех решений выше в одном + блоки по производству.
__________________________________________________________________________________
Что будете вначале делать Вы:
1. Доработки типовых программ.
2. Обновление типовых программ.
3. Обучение пользователей работе в типовых программах.
За этот функционал на данный момент в Москве оценивается от 20 до 60тр.
Что будете делать Вы когда вырастите:
1. Консультирование руководства как строить бизнес-процессы.
2. Создание собственных приложений учета.
3. Внедрять и развивать компании. (приходить как специалист по развитию и руководить развитием предприятия).
4. Что угодно! Уйти из профессии программист 1с можно в любую отрасль, т.к. вы освоите многое находясь на данной должности.
___________________________________________________________________________________
С чего начать:
1. Скачиваем абсолютно легально платформу 1с предприятие с офф сайта:
http://v8.1c.ru/edu/platform_training.htm
2. Скачиваем абсолютно бесплатно и легально курсы Павла Чистова (отличный преподаватель, курсы актуальный по сей день!).
http://chistov.spb.ru/forum/38-1502-1
3. За 1 месяц проходим данный курс (1-2 часа в день).
4. Заходим на сайт поиска работы, вбиваем «Помощник программиста 1с».
5. Приходим на собеседование, говорим, что прошли курс.
Вам необходимо попасть в компанию фрайнчайзи 1с. Т.е. компанию которая обслуживаем другие компании по 1с.
6. Далее работая в франчайзи вы через месяц сдадите экзамен «Профессионал 1с», через 8 месяцев если не забьете сдадите «1с специалист».
7. Теперь вы профи, уже сами поймете куда идти, зп в 100000 Вам обеспечена.
____________________________________________________________________________________
Пару полезных ссылок —
http://www.forum.mista.ru/ — форум программистов 1с, найдете много полезного.
infostart.ru — много полезного по профе, поймете по мере освоения.
____________________________________________________________________________________
Понимаю, что много букв, много видимо упустил, спрашивайте!
Если будет полезно, на данный момент работаю бизнес-аналитиком, могу выложить похожий гайд. (а далее в силу текущей деятельности гайды по
— менеджер по закупкам
— логист
— менеджер по персоналу
— менеджер по продажам
— бизнес-консультант
— бухгалтер
— фин директор
Надеюсь тема гайдов по профессиям взлетит на паблике и будет распространена, т.к. считаю ее интересной и полезной.
Почему using namespace std — плохо?
Используя пространства имен, мы можем явно указать, из какого пространства имен мы хотим использовать определенный символ. Например, в коде std::cout , std является пространством имен, а cout — символом из этого пространства имен, представляющим стандартный поток вывода. Использование ключевого слова using namespace std позволяет нам обращаться к символам из пространства имен std без явного указания этого пространства имен каждый раз. Однако, это также может привести к проблемам. Например, если мы имеем два различных пространства имен, каждое со своим символом info , и мы используем using namespace для обоих пространств имен, то возникает конфликт имён. Компилятор не знает, из какого пространства имен мы хотим использовать info , и может возникнуть неоднозначность. Чтобы избежать таких проблем, хорошей практикой является указывать пространство имен перед каждым символом или использовать только необходимые символы из пространства имен с помощью оператора разрешения области видимости :: . Также стоит избегать использования using namespace в глобальной области видимости в заголовочных файлах, чтобы не добавлять символы из пространства имен в глобальную область видимости всего проекта.
Более простым языком я рассказал об этом в своем телеграм канале: https://t.me/Aren_et_adventures/12
Категории
Счётчик посещений
Теги
![]()
© Арен Елчинян 2022-2023 Powered byBludit
Пространства имен (C++)
Пространство имен — это декларативная область, в рамках которой определяются различные идентификаторы (имена типов, функций, переменных, и т. д.). Пространства имен используются для организации кода в виде логических групп и с целью избежания конфликтов имен, которые могут возникнуть, особенно в таких случаях, когда база кода включает несколько библиотек. Все идентификаторы в пределах пространства имен доступны друг другу без уточнения. Идентификаторы за пределами пространства имен могут получить доступ к членам с помощью полного имени для каждого идентификатора, например, с помощью объявления для одного идентификатора ( using std::string ) или директивы using для всех идентификаторов в пространстве имен ( using namespace std; ). std::vector vec; Код в файлах заголовков всегда должен содержать полное имя в пространстве имен.
В следующем примере показано объявление пространства имен и продемонстрированы три способа доступа к членам пространства имен из кода за его пределами.
namespace ContosoData < class ObjectManager < public: void DoSomething() <>>; void Func(ObjectManager) <> >
Использование полного имени:
ContosoData::ObjectManager mgr; mgr.DoSomething(); ContosoData::Func(mgr);
Чтобы добавить в область видимости один идентификатор, используйте объявление using:
using ContosoData::ObjectManager; ObjectManager mgr; mgr.DoSomething();
Чтобы добавить в область видимости все идентификаторы пространства имен, используйте директиву using:
using namespace ContosoData; ObjectManager mgr; mgr.DoSomething(); Func(mgr);
Директивы using
Директива using позволяет использовать все имена в объекте namespace без имени пространства имен в качестве явного квалификатора. Используйте директиву using в файле реализации (т. е. *.cpp), если используется несколько различных идентификаторов в пространстве имен; Если вы используете только один или два идентификатора, рассмотрите возможность использования объявления, чтобы использовать только эти идентификаторы в область, а не все идентификаторы в пространстве имен. Если локальная переменная имеет такое же имя, как и переменная пространства имен, то переменная пространства имен будет скрытой. Создавать переменную пространства имен с те же именем, что и у глобальной переменной, является ошибкой.
Директиву using можно поместить в верхнюю часть CPP-файла (в области видимости файла) или внутрь определения класса или функции.
Без особой необходимости не размещайте директивы using в файлах заголовков (*.h), так как любой файл, содержащий этот заголовок, добавит все идентификаторы пространства имен в область видимости, что может вызвать скрытие или конфликты имен, которые очень трудно отлаживать. В файлах заголовков всегда используйте полные имена. Если эти имена получаются слишком длинными, используйте псевдоним пространства имен для их сокращения. (См. ниже.)
Объявление пространств имен и их членов
Как правило, пространство имен объявляется в файле заголовка. Если реализации функций находятся в отдельном файле, определяйте имена функций полностью, как показано в следующем примере.
// contosoData.h #pragma once namespace ContosoDataServer
Реализации функций в contosodata.cpp должны использовать полное имя, даже если директива using размещается в верхней части файла:
#include "contosodata.h" using namespace ContosoDataServer; void ContosoDataServer::Foo() // use fully-qualified name here < // no qualification needed for Bar() Bar(); >int ContosoDataServer::Bar()
Пространство имен может быть объявлено в нескольких блоках в одном файле и в нескольких файлах. Компилятор соединит вместе все части во время предварительной обработки и полученное в результате пространство имен будет содержать все члены, объявленные во всех частях. Примером этого является пространство имен std, которое объявляется в каждом из файлов заголовка в стандартной библиотеке.
Члены именованного пространства имен можно определить вне пространства имен, в котором они объявлены явным определением имени. Однако определение должно располагаться после точки объявления в пространстве имен, окружающем то пространство имен, где находится объявление. Например:
// defining_namespace_members.cpp // C2039 expected namespace V < void f(); >void V::f() < >// ok void V::g() < >// C2039, g() is not yet a member of V namespace V
Эта ошибка может возникнуть, когда члены пространства имен объявляются в нескольких файлах заголовка и эти заголовки не включены в правильном порядке.
Глобальное пространство имен
Если идентификатор не объявлен явно в пространстве имен, он неявно считается входящим в глобальное пространство имен. Как правило, старайтесь избегать объявления в глобальном область, если это возможно, за исключением основной функции точки входа, которая должна находиться в глобальном пространстве имен. Чтобы явно указать глобальный идентификатор, используйте оператор разрешения области видимости без имени, как сделано в ::SomeFunction(x); . Это позволит отличать данный идентификатор от любого другого элемента с таким же именем, находящегося в другом пространстве имен. Кроме того, это облегчит понимание кода.
Пространство имен std
Все стандартные типы и функции библиотек C++ объявляются в std пространстве имен или пространствах имен, вложенных внутри std .
Вложенные пространства имен
Пространства имен могут быть вложенными. Обычное вложенное пространство имен имеет неквалифицированный доступ к членам родительского элемента, но родительские члены не имеют неквалифицированного доступа к вложенному пространству имен (если он не объявлен как встроенный), как показано в следующем примере:
namespace ContosoDataServer < void Foo(); namespace Details < int CountImpl; void Ban() < return Foo(); >> int Bar(); int Baz(int i) < return Details::CountImpl; >>
Обычные вложенные пространства имен можно использовать для инкапсуляции данных о внутренней реализации, которые не являются частью открытого интерфейса родительского пространства имен.
Встроенные пространства имен (C++11)
В отличие от обычных вложенных пространств имен члены встроенного пространства имен обрабатываются как члены родительского пространства имен. Эта особенность позволяет выполнять поиск перегруженных функций с зависимостью от аргументов среди функции, которые имеют перегрузки в родительском и вложенном встроенном пространстве имен. Это также позволяет объявлять специализации в родительском пространстве имен для шаблонов, объявленных во встроенном пространстве имен. В следующем примере показано, как внешний код привязывается к встроенному пространству имен по умолчанию.
// Header.h #include namespace Test < namespace old_ns < std::string Func() < return std::string("Hello from old"); >> inline namespace new_ns < std::string Func() < return std::string("Hello from new"); >> > // main.cpp #include "header.h" #include #include int main() < using namespace Test; using namespace std; string s = Func(); std::cout
В следующем примере показано, как можно объявить специализацию в родительском пространстве имен шаблона, объявленного во встроенном пространстве имен.
namespace Parent < inline namespace new_ns < template struct C < T member; >; > template<> class C <>; >
Встроенные пространства имен можно использовать как механизм управления версиями для управления изменениями в открытом интерфейсе библиотеки. Например, можно создать одно родительское пространство имен и инкапсулировать каждую версию интерфейса в своем собственном пространстве имен, вложенном в родительское. Пространство имен, которое содержит самую последнюю или основную версию, квалифицируется как встроенное и поэтому представляется так, будто оно является непосредственным членом родительского пространства имен. Клиентский код, вызывающий Parent::Class, автоматически привязывается к новому коду. Клиенты, которые предпочитают использовать старую версию, могут по-прежнему получить доступ к ней, используя полный путь к вложенному пространству имен, содержащему данный код.
Ключевое слово inline должно применяться к первому объявлению пространства имен в единице компиляции.
В следующем примере показано две версии интерфейса: каждое — во вложенном пространстве имен. Пространство имен v_20 содержит некоторые изменения из интерфейса v_10 и помечается как встроенное. Клиентский код, который использует новую библиотеку и вызывает Contoso::Funcs::Add , вызовет версию v_20. Код, который пытается вызвать Contoso::Funcs::Divide , теперь будет вызывать ошибку времени компиляции. Если действительно требуется эта функция, доступ к версии v_10 можно получить путем явного вызова Contoso::v_10::Funcs::Divide .
namespace Contoso < namespace v_10 < template class Funcs < public: Funcs(void); T Add(T a, T b); T Subtract(T a, T b); T Multiply(T a, T b); T Divide(T a, T b); >; > inline namespace v_20 < template class Funcs < public: Funcs(void); T Add(T a, T b); T Subtract(T a, T b); T Multiply(T a, T b); std::vectorLog(double); T Accumulate(std::vector nums); >; > >
Псевдонимы пространств имен
Имена пространств имен должны быть уникальными, из-за чего зачастую они получаются не слишком короткими. Если длина имени затрудняет чтение кода или утомительно вводить в файл заголовка, где нельзя использовать директивы, можно сделать псевдоним пространства имен, который служит сокращенным для фактического имени. Например:
namespace a_very_long_namespace_name < class Foo <>; > namespace AVLNN = a_very_long_namespace_name; void Bar(AVLNN::Foo foo)
анонимные или безымянные пространства имен
Вы можете создать явное пространство имен, но не присвоить ему имя.
namespace < int MyFunc()<>>
Это называется неименованным или анонимным пространством имен, и это полезно, если вы хотите сделать объявления переменных невидимыми для кода в других файлах (т. е. дать им внутреннюю компоновку), не создавая именованное пространство имен. Весь код, находящийся в том же файле, может видеть идентификаторы в безымянном пространстве имен, но эти идентификаторы, а также само пространство имен, будет невидимым за пределами этого файла или, точнее, вне блока перевода.
Стоит ли переходить на std:: или же лучше остаться на using namespace std?
Пишу на C++. Слышал что хорошие программисты используют std:: . Стоит ли тоже перейти и писать так же или же лучше оставаться на using namespace std и не вешать геморой на задницу?
- Вопрос задан более трёх лет назад
- 924 просмотра
5 комментариев
Простой 5 комментариев

По правде, это именно то, без чего тебе никогда не стать хорошим программистом.
vladik_koresh @vladik_koresh Автор вопроса
longclaps, а можешь объяснить зачем его использовать, в чём плюсы? Ведь зачем то облегчили юзингом.

vladik_koresh, ну что ты как маленький? Какой кодестайл в команде принят, в таком и пишут.
vladik_koresh @vladik_koresh Автор вопроса
longclaps, я не опытный программист, да и вообще ещё не программист толком)

Roman @myjcom Куратор тега C++
Решения вопроса 0
Ответы на вопрос 2

А какие минусы в использовании using namespace std? По моему никаких, это только делает код более читабельным.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Vitaly @vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Основная проблема -- это возможные конфликты имён, в особенности, если вы прописываете использование нескольких пространств имён таким образом. Помимо этого, есть риск получить очень много вариантов различных конструкций в списке автодополнения IDE. Сам по себе std -- это очень короткий идентификатор, поэтому опускать его нет особого смысла.
PS
Ко всему прочему, никогда не пишите "using namespace" в заголовочных файлах. За исключением случаев, когда вы действительно понимаете что делаете.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ваш ответ на вопрос
Войдите, чтобы написать ответ

- C++
- +1 ещё
Как продключить бибилиотеку curses.h в проект?
- 1 подписчик
- 49 минут назад
- 14 просмотров