C++ Academy
16.5K subscribers
619 photos
127 videos
1 file
583 links
По всем вопросам- @haarrp

@itchannels_telegram - 🔥 best it channels

РКН: clck.ru/3FmxJF
Download Telegram
📌 7 бесплатных курсов по С++

1. Введение в программирование (C++) - Stepik (BEG)

2. Основы разработки на С++: белый пояс - Шишков Илья Иванович, Парамонов Евгений Анатольевич, Полднев Антон Вячеславович, Лежанкин Иван Андреевич (Coursera) (INT)

3. Специализация Coding for Everyone: C and C++ - Учитесь кодингу на C и C++. Получите глубокое понимание программирования, научившись писаь код, отлаживать и решать сложные задачи на языках C и C++.

4. Специализация Accelerated Computer Science Fundamentals - Структуры данных и алгоритмы в C++. Изучите основы информатики, реализуя структуры данных на C++.

5. Object-Oriented Data Structures in C++ (Coursera) (INT)

6. Основы С++ и основы UE4 - Начало изучения C++(Udemy)

7. Уроки по С++ - Ravesli (INT)

@cpluspluc
👍11🔥4🤔21
Наглядная шпаргалка по основным темам в области Backend-разработки

Весь материал разбит на главы, которые включают в себя разные темы. В каждой теме можно выделить три основные части:

Визуальная часть - различные изображения/таблицы/шпаргалки для лучшего понимания (может отсутствовать). Все рисунки и таблицы сделаны с нуля, специально для этого репозитория.

Краткое описание - очень краткая выжимка информации с перечнем основных терминов и понятий. На термины навешиваются гиперссылки ведущие на соответствующий раздел в Википедии или подобном справочном ресурсе.

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

Github

@cpluspluc
🔥62👍2🍓1
🛠 Полезные библиотеки С++

Armadillo - быстрая библиотека C++ для линейной алгебры и научных вычислений.

🖥 Github

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥63
🔥 C++ code snippets

Большой набор полезных скриптов и примеров кода на C++

Github

@cpluspluc
👍16🔥41
💡Задача: "Матрица спирали"

Условие задачи: дан двумерный массив, надо вернуть все его элементы в "спиральном" порядке по часовой стрелке.

Пример:
Ввод:
matrix = [[1,2,3],[4,5,6],[7,8,9]]
Вывод: [1,2,3,6,9,8,7,4,5]

Ввод: matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]
Вывод: [1,2,3,4,8,12,11,10,9,5,6,7]

📌Решение

Пишите свое решение в комментариях👇

@cpluspluc
👍9🔥42🤔1
🔥 13 ресурсов для C++ разработчиков , которые помогут закрепить теорию и поупражняться в программировании

1. Hacking C++ - это наглядный справочник с картинками и инфографикой, который содержит подробное руководство по изучению языка для новичков.

2. Академия Яндекса предоставляет бесплатный онлайн-учебник по С++, который рассчитан на новичков, имеющих знания в области информатики и владеющих любым языком программирования на школьном уровне. Хендбук содержит теорию и практические задачи, решения которых проверяются автоматически. Вы можете изучать материал последовательно или выборочно по главам в своем времени.

3. CodeRun - это онлайн-тренажер с каталогом задач для разработчиков, на котором эксперты Яндекса и приглашенные специалисты собрали задачи с различных мероприятий. Задачи разбиты по темам и уровням сложности.

4. The C++ Asynchronous Framework - это современный асинхронный фреймворк с открытым исходным кодом и богатым набором абстракций для быстрого и удобного создания микросервисов, сервисов и утилит.

5. Комьюнити Stack Overflow - это платформа, на которой собрана огромная коллекция вопросов и ответов по программированию, где участники сообщества активно делятся опытом со своими коллегами.

6. Сайт Standard C++ Foundation - это ресурс, на котором публикуются новости, обсуждение стандарта C++ для всех компиляторов и платформ, а также анонсы тематических конференций.

7. Онлайн-документация по С++ - это справочник на английском языке по языкам C, C++ и стандартным библиотекам с подробными примерами, а также адаптированная версия сайта для пользователей, которые предпочитают учиться на русском языке.

8. Гайдлайны С++ Core Guidelines - это open-source проект от создателя С++ Бьярне Страуструпа и эксперта по C++ Герба Саттера. На сайте публикуются рекомендации, которые помогают разобраться с синтаксисом языка и упростить процесс написания кода.

9. Онлайн-компилятор Compiler Explorer - это интерактивный инструмент, который позволяет набирать код и сразу просматривать ассемблерный вывод. Результаты проверки можно поделиться с друзьями и коллегами, отправив им ссылку.

10. #SimpleCode - это YouTube-канал, который познакомит вас с программированием на разных языках, в том числе и на C++. Этот ресурс будет полезен разработчикам с любым бэкграундом.

11. ProgrammingKnowledge - это еще один YouTube-канал для начинающих программистов, на котором можно найти много пошаговых видеоуроков по разным языкам.

12. Codeforces - это платформа для создания, проведения и обсуждения соревнований по программированию с элементами соцсети.

13. Codewars - это огромная подборка задач на более чем 20 языках программирования, где вы можете обсудить задачи с другими игроками и посмотреть альтернативные решения.

👍 Сохраняйте и делитесь с коллегами, чтобы не потерять.

@cpluspluc
👍185🔥3
💡Задача: Игра в прыжки

Условие: Дан целочисленный массив nums. Изначально вы находитесь в первом индексе массива, и каждый элемент массива представляет максимальную длину прыжка в этой позиции.

Верните true, если вы можете добраться до последнего индекса, или false в противном случае.

Пример:
Ввод: nums = [1,3,1,1,4]
Вывод: true
Объяснение: Переходим на 1 шаг от индекса 0 к 1, затем на 3 шага к последнему индексу.

Ввод: nums = [3,2,1,0,4]
Вывод: false

Решение:

class Solution {
public:
bool canJump(vector<int>& nums) {
int n = nums.size();
int maxReach = 0;
for (int i = 0; i < n; i++) {
if (i > maxReach) return false;
maxReach = max(maxReach, i + nums[i]);
}
return true;
}
};

Временное решение: O(N)

Пространственное решение: O(1)

Пишите свое решение в комментариях👇

@cpluspluc
👍73🔥2
Что выведет код ?

#include<iostream>

using namespace std;
void swap(int m, int n) {
int x = m;

m = n;
n = x;
}
main() {
int x = 5, y = 3;

swap(x,y);
cout<<x<<" "<<y;
}


@cpluspluc
👍102😁2💩2🔥1
Что выведет код ?
Anonymous Quiz
33%
3 5
50%
5 3
6%
5 5
12%
Compile error
👍25🔥42
🖼 Axodox machinelearning

Чистая реализация на C++ синтеза изображений на основе стабильной диффузии, включая txt2img, img2img и inpainting.

Github
Onnx

@cpluspluc
👍11🔥31
🔥 Подборка каналов для разработчиков

#️⃣ c# c++
C# - погружение в C#
@csharp_cplus чат
@csharp_1001_notes - инструменты C#

🖥 Machine learning

ai_ml – крупнейши канал по ии, нейросетям и науке о данных.
datasc - дата сайнс обучение самой востребованной профессии.
@bigdatai - Big Data

@machinelearning_ru – гайды по машинному обучению
@machinelearning_interview – подготовка к собеседованию мл.
@datascienceiot – бесплатные книги ds
@ArtificialIntelligencedl – ИИ

@machinee_learning – чат о машинном обучении
@datascienceml_jobs - вакансии ds, ml
@Machinelearning_Jobs - чат с вакансиями


🖥 SQL базы данных

@sqlhub - Повышение эффективности кода с грамотным использованием бд.
@chat_sql - чат изучения бд.

👣 Golang
@Golang_google - восхитительный язык от Google, мощный и перспективный.
@golang_interview - вопросы и ответы с собеседований по Go. Для всех уровней разработчиков.
@golangtests - интересные тесты и задачи GO
@golangl - чат изучающих Go
@GolangJobsit - отборные вакансии и работа GO
@golang_jobsgo - чат для ищущих работу.
@golang_books - полезные книги Golang
@golang_speak - обсуждение языка Go
@golangnewss - новости go

🖥 Linux
linux - kali linux ос для хакинга
linux chat - чат linux для обучения и помощи.
@linux_read - бесплатные книги linux

🖥 Python

@pythonl - главный канал самого популярного языка программирования.
@pro_python_code – учим python с ментором.
@python_job_interview – подготовка к Python собеседованию.
@python_testit - проверочные тесты на python
@pythonlbooks - современные книги Python
@python_djangojobs - работа для Python программистов
@python_django_work - чат обсуждения вакансий

🖥 Javascript / front

@react_tg - - 40,14% разработчиков сайтов использовали React в 2022 году - это самая популярная библиотека для создания сайтов.
@javascript -канал для JS и FrontEnd разработчиков. Лучшие практики и примеры кода. Туториалы и фишки JS
@Js Tests - каверзные тесты JS
@hashdev - погружение в web разработку.
@javascriptjobjs - отборные вакансии и работа FrontEnd.
@jsspeak - чат поиска FrontEnd работы.

🖥 Java
@javatg - выучить Java с senior разработчиком на практике
@javachats - чат для ответов на вопросы по Java
@java_library - библиотека книг Java
@android_its - Android разработка
@java_quizes - тесты Java
@Java_workit - работа Java
@progersit - шпаргалки ит

👷‍♂️ IT работа

https://t.me/addlist/_zyy_jQ_QUsyM2Vi -ит каналы по яп с вакансиями

🤡It memes
@memes_prog - ит-мемы

⚙️ Rust
@rust_code - Rust избавлен от болевых точек, которые есть во многих современных яп
@rust_chats - чат rust

📓 Книги

https://t.me/addlist/HwywK4fErd8wYzQy - актуальные книги по всем яп

⭐️ Нейронные сети
@vistehno - chatgpt ведет блог, решает любые задачи и отвечает на любые ваши вопросы.
@aigen - сети для генерации картинок. видео, музыки и многого другого.
@neural – погружение в нейросети.

📢 English for coders

@english_forprogrammers - Английский для программистов

🖥 Devops
Devops - канал для DevOps специалистов.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥32
🧠Задача о максимальной сумме подмассива (алгоритм Кадане) С++

Дан целочисленный массив, найдите в нем непрерывный подмассив с наибольшей суммой.

Например:
Input: {-2, 1, -3, 4, -1, 2, 1, -5, 4}

Output: Subarray with the largest sum is {4, -1, 2, 1} with sum 6.


Мы можем легко решить эту задачу за линейное время, используя Алгоритм Кадане.
Идея состоит в том, чтобы поддерживать максимальный (с положительной суммой) подмассив, “заканчивающийся” на каждом индексе данного массива. Этот подмассив либо пуст (в этом случае его сумма равна нулю), либо состоит на один элемент больше, чем максимальный подмассив, оканчивающийся на предыдущем индексе.

Алгоритм может быть реализован следующим образом на C++:
#include <iostream>
#include <vector>
using namespace std;

// Функция для нахождения максимальной суммы непрерывного подмассива
// в заданном целочисленном массиве
int kadane(vector<int> const &arr)
{
// сохраняет максимальный суммарный подмассив, найденный на данный момент
int max_so_far = 0;

// сохраняет максимальную сумму подмассива, заканчивающегося на текущей позиции
int max_ending_here = 0;

// обход заданного массива
for (int i = 0; i < arr.size(); i++)
{
// обновить максимальную сумму подмассива, "заканчивающегося" на индексе "i" (путем добавления
// текущий элемент до максимальной суммы, заканчивающейся на предыдущем индексе 'i-1')
max_ending_here = max_ending_here + arr[i];

// если максимальная сумма отрицательна, устанавливаем ее в 0 (что представляет
// пустой подмассив)
max_ending_here = max(max_ending_here, 0);

// обновить результат, если текущая сумма подмассива окажется больше
max_so_far = max(max_so_far, max_ending_here);
}

return max_so_far;
}

int main()
{
vector<int> arr = { -2, 1, -3, 4, -1, 2, 1, -5, 4 };

cout << "The maximum sum of a contiguous subarray is " << kadane(arr);

return 0;
}


результат:

The maximum sum of a contiguous subarray is 6

Временная сложность приведенного выше решения равна O(n) и не требует дополнительного места, где n это размер ввода.

Приведенный выше код не обрабатывает случай, когда все элементы массива отрицательные. Если массив содержит все отрицательные значения, ответом является максимальный элемент. Мы можем легко разместить эту проверку перед тем, как продолжить алгоритм. Реализацию можно увидеть ниже на C++:

Продолжение

@cpluspluc
7👍6🔥3🍌1
🖥 dlib C++ library

Dlib - это современный инструментарий C++, содержащий алгоритмы машинного обучения и инструменты для создания сложного программного обеспечения на C++ для решения широкого спектра задач.

🖥 Github

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥14👍32
📌 Задача палиндром наибольшей длины, полученный с помощью соединений из слов, состоящих из двух букв.

Сложность: Средняя

Условие задачи: дан массив строк, каждый элемент которого состоит из двух букв английского алфавита в нижнем регистре.

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

В ответе надо вернуть длину такого палидрома.


Палиндром - строка, которая одинаково читаются слева направо и справа налево.

Пример:

Ввод:
words = ["lc","cl","gg"]
Вывод: 6
Объяснение: lc" + "gg" + "cl" = "lcggcl" или же "clgglc", но оба имеют максимальную длину 6.

Ввод: words = ["ab","ty","yt","lc","cl","ab"]
Вывод: 8
Объяснение: "ty" + "lc" + "cl" + "yt" = "tylcclyt" или "lcyttycl"

Ввод: words = ["cc","ll","xx"]
Вывод: 2

Решение

Пишите свое решение в комментариях👇

@cpluspluc
👍11🔥51
Что выведет код ?

using namespace std;
class A{
public:
A(){
cout<<"Constructor called\n";
}
~A(){
cout<<"Destructor called\n";
}
};
int main(int argc, char const *argv[])
{
A *a = new A[5];
delete[] a;
return 0;
}


@cpluspluc
👍53🔥1
Redis plus plus

Redis – это быстрое хранилище данных типа «ключ‑значение» в памяти с открытым исходным кодом.

Redis plus plus - это клиентская библиотека C++ для работы с Redis.

git clone https://github.com/redis-developer/redis-plus-plus-modules.git
cd redis-plus-plus-modules
./bootstrap.sh
./configure
make -j8

🖥 Github

@cpluspluc
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥7👍43
💡Задача: На языке C++ создайте собственную реализацию интеллектуального указателя с автоматическим управлением памятью.

Интеллектуальный указатель является вариантом обычного указателя, который обеспечивает безопасность путем автоматического управления памятью. Такой указатель предотвращает возникновение проблем, таких как «висячие» указатели, «утечки» памяти и отказы в выделении памяти. Он также отслеживает количество ссылок на указанный объект для эффективного управления памятью.

Впервые это может показаться сложной задачей, особенно для тех, кто не является экспертом в языке C++.

📌 Решение

Пишите свое решение в комментариях👇

@cpluspluc
🔥11👍61
💡Задача на перегрузку функций в C++, которая может оказаться сложнее, чем выглядит.

Предположим, у нас есть два класса:

class Parent {
public:
virtual void print() {
std::cout << "Родительский класс" << std::endl;
}
};

class Derived : public Parent {
public:
virtual void print(int x) {
std::cout << "Производный класс" << std::endl;
}
};



Что выведут два следующих куска кода и почему?

int main() {
Derived *derived = new Derived;
derived -> print();
return 0;
}

int main() {
Parent *derived = new Derived;
derived -> print();
return 0;
}


Ответ:
Не все так просто, как кажется на первый взгляд. Если для вас эта задача показалась легкой, то проверьте свои навыки в C++, прочитав решение.

- В первом случае программа завершится с ошибкой.
- Во втором случае выведется «Родительский класс».

Мы имеем дело с механизмом перегрузки функций и скрытия имен. В первом случае функция внутри производного класса переопределит родительские функции вне зависимости от их сигнатуры. Поэтому, несмотря на то, что в родительском классе имеется функция, соответствующая вызываемой внутри main(), компилятор об этом не узнает и выдаст ошибку
error: no matching function for call to 'Derived::print()'
Почему же во втором случае мы не получаем ошибку, хотя также используем объект Derived для вызова print()?

Ключевым моментом здесь является то, что поиск имени начинается с класса, указанного в типе переменной, а не фактического типа объекта. Переменная derived типа Parent указывает на объект типа Derived, поэтому изначально поиск функции print() будет производиться внутри класса Parent. Вследствие этого компиляция завершается успешно и мы получаем соответствующий вывод.


Пишите свое решение в комментариях👇

@cpluspluc
👍196🔥5