Статические переменные — это переменные, которые сохраняют своё значение между вызовами функции или в пределах класса. Они инициализируются только один раз и существуют на протяжении всего времени выполнения программы.
👉 В функции статическая переменная сохраняет своё значение между вызовами:
👉 В классе статическая переменная принадлежит классу, а не объекту, и общая для всех экземпляров.
Ставь👍 , если было полезно!
Больше ответов на сайте👈
✈️ С++ собеседования
#include <iostream>
void counter() {
static int count = 0;
count++;
std::cout << "Count: " << count << std::endl;
}
int main() {
counter(); // Вывод: Count: 1
counter(); // Вывод: Count: 2
return 0;
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6❤1🔥1
Существуют три основные категории паттернов: порождающие, структурные и поведенческие. Порождающие паттерны, такие как Singleton и Factory, управляют созданием объектов. Структурные, например, Adapter и Composite, определяют способы построения классов и объектов. Поведенческие, такие как Observer и Strategy, описывают взаимодействие между объектами.
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11⚡1
noexcept
может улучшить производительность, так как компилятор может оптимизировать код, зная, что исключения не возникнут. Это также помогает в обеспечении безопасности исключений, особенно в деструкторах и операциях перемещения.void safeFunction() noexcept {
// Код, который не выбрасывает исключений
}
void riskyFunction() {
throw std::runtime_error("Ошибка");
}
int main() {
safeFunction(); // Безопасно
// riskyFunction(); // Это вызовет исключение
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥2
std::map
и std::set
— это контейнеры из стандартной библиотеки C++, которые предоставляют эффективные способы хранения и управления данными.std::map
— это ассоциативный контейнер, который хранит пары "ключ-значение". Он автоматически сортирует элементы по ключам и обеспечивает быстрый доступ к значениям по ключу. Пример использования:#include <map>
#include <iostream>
std::map<int, std::string> myMap;
myMap[1] = "one";
myMap[2] = "two";
for (const auto& pair : myMap) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
std::set
— это контейнер, который хранит уникальные элементы в отсортированном порядке. Он предоставляет быстрые операции вставки, удаления и поиска. Пример:#include <set>
#include <iostream>
std::set<int> mySet = {1, 2, 3};
mySet.insert(4);
for (int n : mySet) {
std::cout << n << std::endl;
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥2
this
представляет собой неявный параметр, передаваемый в нестатические член-функции класса. Он указывает на текущий экземпляр объекта, для которого вызывается метод. Это позволяет функции обращаться к членам объекта и различать их от локальных переменных или параметров с одинаковыми именами.this
особенно полезно при необходимости вернуть объект из метода, реализовать метод цепочки вызовов или различать члены класса от параметров функции. Например:class MyClass {
public:
int value;
void setValue(int value) {
this->value = value;
}
};
this->value
обозначает член класса value
, тогда как параметр функции также называется value
. Без использования this
компилятор не сможет различить их.this
позволяет реализовать возврат текущего объекта из метода:MyClass& increment() {
this->value++;
return *this;
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13✍1🤔1
inline
.inline int add(int a, int b) {
return a + b;
}
inline
, если функция слишком сложная. Inline-функции должны быть определены в заголовочных файлах, чтобы компилятор имел доступ к их коду при компиляции каждого модуля.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
std::unordered_map
— это контейнер из стандартной библиотеки C++, который реализует хеш-таблицу для хранения пар ключ-значение. В отличие от std::map
, который хранит элементы в отсортированном порядке, std::unordered_map
не гарантирует порядок элементов, но обеспечивает более быструю амортизированную сложность операций вставки, удаления и поиска — O(1).std::unordered_map
должны быть уникальными, а для их сравнения и хеширования используются функции std::hash
и operator==
. Это делает std::unordered_map
подходящим для случаев, когда порядок не важен, но требуется высокая скорость доступа к элементам.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12✍2🔥1🤩1💯1👨💻1
std::vector
и std::list
. Аллокаторы обеспечивают гибкость и позволяют оптимизировать использование памяти.template <typename T>
class CustomAllocator {
public:
using value_type = T;
CustomAllocator() = default;
T* allocate(std::size_t n) {
return static_cast<T*>(::operator new(n * sizeof(T)));
}
void deallocate(T* p, std::size_t) {
::operator delete(p);
}
};
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12🔥2
C++ собеседования pinned «ℹ️ Подписывайся на наши новые каналы! 🖥 JS собеседования 🖥 Backend собеседования»
std::find
— это алгоритм из библиотеки <algorithm>
в C++, который используется для поиска элемента в диапазоне. Он принимает три аргумента: итераторы начала и конца диапазона, а также значение, которое нужно найти.#include <vector>
#include <algorithm>
#include <iostream>
std::vector<int> vec = {1, 2, 3, 4, 5};
auto it = std::find(vec.begin(), vec.end(), 3);
if (it != vec.end()) {
std::cout << "Element found at index: " << std::distance(vec.begin(), it) << std::endl;
} else {
std::cout << "Element not found" << std::endl;
}
std::find
возвращает итератор на него, иначе — итератор конца.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤2
union
, но с поддержкой типов, которые имеют нестандартные конструкторы и деструкторы.#include <variant>
#include <iostream>
int main() {
std::variant<int, double, std::string> data;
data = 10;
std::cout << std::get<int>(data) << std::endl;
data = 3.14;
std::cout << std::get<double>(data) << std::endl;
data = "Hello";
std::cout << std::get<std::string>(data) << std::endl;
return 0;
}
std::get
для доступа к текущему значению.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤2
int value = 10;
int* const ptr = &value;
*ptr = 20; // OK
ptr = &anotherValue; // Ошибка
const int value = 10;
const int* ptr = &value;
ptr = &anotherValue; // OK
*ptr = 20; // Ошибка
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9🔥1
nullptr
— это ключевое слово, введенное в стандарте C++11, которое представляет собой указатель на нулевой адрес. Оно заменяет использование NULL
, который в C++ является просто макросом, определенным как 0
. Использование nullptr
улучшает безопасность и ясность кода, так как он имеет тип std::nullptr_t
, что позволяет избежать неоднозначностей при перегрузке функций.
void foo(int* ptr) {
// Функция принимает указатель на int
}
void foo(double val) {
// Функция принимает double
}
foo(nullptr); // Вызовет foo(int*), так как nullptr имеет тип указателя
nullptr
помогает избежать ошибок, связанных с неявным преобразованием типов, и делает код более читаемым.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11🔥1
#include <iostream>
// Определение структуры
struct Point {
int x;
int y;
// Метод для вывода координат
void print() {
std::cout << "Point(" << x << ", " << y << ")" << std::endl;
}
};
int main() {
// Создание экземпляра структуры
Point p;
p.x = 10;
p.y = 20;
// Вызов метода структуры
p.print(); // Вывод: Point(10, 20)
}
Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥3❤1
auto sum = [](int a, int b) -> int {
return a + b; // Возвращает сумму a и b
};
std::for_each
или std::sort
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤3
#include <iostream>
using namespace std;
// Базовый класс
class Animal {
public:
void eat() {
cout << "Eating..." << endl;
}
};
// Производный класс
class Dog : public Animal {
public:
void bark() {
cout << "Barking..." << endl;
}
};
int main() {
Dog dog;
dog.eat(); // Наследованный метод
dog.bark(); // Собственный метод
return 0;
}
Производный класс
Dog
наследует метод eat()
от базового класса Animal
.Ставь
Больше ответов на сайте
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤1
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9✍2👨💻1