<iostream>
для консольного ввода/вывода и <fstream>
для работы с файлами.Пример создания потока для чтения из файла:
#include <fstream>
#include <iostream>
#include <string>
int main() {
std::ifstream file("example.txt"); // Создание потока для чтения из файла
std::string line;
if (file.is_open()) {
while (getline(file, line)) { // Чтение файла построчно
std::cout << line << std::endl; // Вывод строки на консоль
}
file.close(); // Закрытие файла
} else {
std::cerr << "Не удалось открыть файл" << std::endl;
}
return 0;
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥2
template
, за которым следует список параметров шаблона в угловых скобках. Пример:
template <typename T>
T add(T a, T b) {
return a + b; // Функция складывает два значения типа T
}
T
— это параметр шаблона, который будет заменен на конкретный тип данных при вызове функции add
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥3
shared_ptr
. Он не увеличивает счетчик ссылок на объект, что помогает избежать циклических зависимостей и утечек памяти.weak_ptr
используется для проверки существования объекта и получения shared_ptr
, если объект еще существует. Для этого применяется метод lock()
, который возвращает shared_ptr
.#include <iostream>
#include <memory>
class Node {
public:
std::weak_ptr<Node> next; // Слабая ссылка на следующий узел
};
int main() {
auto node1 = std::make_shared<Node>();
auto node2 = std::make_shared<Node>();
node1->next = node2; // Установка слабой ссылки
if (auto sharedNext = node1->next.lock()) {
std::cout << "Next node is alive\n";
} else {
std::cout << "Next node is expired\n";
}
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤩1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
try
, catch
и throw
.
try {
// Код, который может вызвать исключение
if (errorCondition) {
throw std::runtime_error("Error occurred");
}
} catch (const std::exception& e) {
// Обработка исключения
std::cout << "Exception caught: " << e.what() << std::endl;
}
try
блок содержит код, который может вызвать исключение. throw
используется для генерации исключения. catch
блок перехватывает и обрабатывает исключение, предоставляя возможность восстановить выполнение программы.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7👨💻1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2
#include <type_traits>
// Функция доступна только для целых типов
template <typename T>
typename std::enable_if<std::is_integral<T>::value, T>::type
foo(T value) {
return value * 2;
}
// Функция доступна только для вещественных типов
template <typename T>
typename std::enable_if<std::is_floating_point<T>::value, T>::type
foo(T value) {
return value / 2;
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1🔥1
vector
и list
— это контейнеры STL, но они имеют разные структуры и характеристики.vector
— это динамический массив, который обеспечивает быстрый доступ к элементам по индексу и эффективное добавление элементов в конец. Однако вставка или удаление элементов в середине может быть медленной, так как требует сдвига элементов.list
— это двусвязный список, который позволяет быстро вставлять и удалять элементы в любом месте, но доступ к элементам по индексу медленный, так как требует последовательного обхода.Выбор между ними зависит от требований к производительности операций доступа и модификации.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
#include <iostream>
using namespace std;
class Base {
public:
virtual void show() { // Виртуальная функция
cout << "Base class" << endl;
}
};
class Derived : public Base {
public:
void show() override { // Переопределение функции
cout << "Derived class" << endl;
}
};
int main() {
Base* obj = new Derived();
obj->show(); // Вызов функции Derived
delete obj;
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥1💯1
API (Application Programming Interface) бывают нескольких типов, каждый из которых имеет свои особенности и применение.
😎 REST API — основан на архитектурном стиле REST. Использует HTTP методы (GET, POST, PUT, DELETE) и работает с ресурсами, идентифицируемыми URI.
😎 SOAP API — протокол, использующий XML для обмена сообщениями. Обеспечивает высокий уровень безопасности и надежности, но более сложен в реализации.
😎 GraphQL API — позволяет клиентам запрашивать только необходимые данные. Гибкий и эффективный, особенно для сложных запросов.
😎 gRPC API — использует HTTP/2 и Protocol Buffers. Поддерживает двунаправленную потоковую передачу и высокую производительность.
Каждый тип API имеет свои преимущества и ограничения, подходящие для различных задач и архитектурных решений.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ С++ собеседования
Каждый тип API имеет свои преимущества и ограничения, подходящие для различных задач и архитектурных решений.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥3
std::thread::detach
используется для отделения потока от объекта std::thread
, позволяя потоку продолжать выполнение независимо. После вызова detach
, объект std::thread
больше не связан с потоком и не может быть использован для управления им. Это полезно, когда поток должен работать в фоновом режиме, но важно помнить, что необходимо обеспечить завершение потока до завершения программы, иначе поведение будет неопределённым.
#include <iostream>
#include <thread>
void backgroundTask() {
// Фоновая задача
std::cout << "Фоновая задача выполняется\n";
}
int main() {
std::thread t(backgroundTask);
t.detach(); // Отделяем поток
// Поток продолжает выполнение независимо
std::cout << "Главный поток завершён\n";
return 0;
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥2
lvalue
(left value) — это выражение, которое ссылается на область памяти и имеет адрес, позволяя присваивание. rvalue
(right value) — это временное значение, не имеющее адреса, используемое в выражениях.
int x = 10; // x — это lvalue, 10 — это rvalue
int y = x + 5; // x + 5 — это rvalue, результат временный
int &ref = x; // ref — это lvalue-ссылка на x
lvalue
может стоять слева от оператора присваивания, а rvalue
— только справа.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10❤1👀1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥2