Главная страница

Шпора_Инфа. 1. Программирование


Скачать 440.9 Kb.
Название1. Программирование
Дата01.04.2019
Размер440.9 Kb.
Формат файлаdocx
Имя файлаШпора_Инфа.docx
ТипДокументы
#72257


1. Программирование– это создание программ (программного обеспечения), как правило, с применением языков программирования, т.е. это процесс реализации одного или нескольких взаимосвязанных алгоритмов на некотором языке программирования.

Концепции:

процедурное программирование;

модульное программирование;

объектно-ориентированное программирование;

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

Функциональная декомпозиция задачи - разбиение большой задачи на ряд более мелких, функционально самостоятельных подзадач - модулей. Модули связаны между собой только по входным и выходным данным.

2. Концепция объектно-ориенированного программирования (ООП) базируется на понятии объекта (класса) как типа данных языка программирования.

Инкапсуляция - это использование объединения данных и инструкций по их обработке в единую сущность – класс.

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

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

Преимущества ООП :ООП позволяет использовать один и тот же программный код с разными данными. На основе классов создается множество объектов, у каждого из которых могут быть собственные значения полей. Нет необходимости вводить множество переменных, т. к. объекты получают в свое распоряжение индивидуальные пространства имен. Наследование позволяет не писать новый код, а использовать и настраивать уже существующий за счет добавления и переопределения атрибутов.

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

Модуль - отдельная функционально законченная программная единица, некоторым образом идентифицируемая и объединяемая с другими, средство определения логически связанной совокупности объектов, средство их выделения и изоляции.

Пространство объектов:

  • Всё является объектом.

  • Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие.

  • Каждый объект имеет независимую память, которая состоит из других объектов.

  • Каждый объект является представителем класса, который выражает общие свойства объектов (таких, как целые числа или списки).

  • В классе задаётся поведение (функциональность) объекта. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия.

  • Классы организованы в единую структуру. Память и поведение, связанное с экземплярами определённого класса, автоматически доступны любому классу, расположенному ниже в иерархическом дереве.

4. Указатели могут участвовать в арифметических операциях. Однако сами операции производятся немного иначе, чем с числами. И многое здесь зависит от типа указателя. К указателю можно прибавлять целое число, и также можно вычитать из указателя целое число. Кроме того, можно вычитать из одного указателя другой указатель. Операция инкремента ++ увеличивает значение на единицу. В случае с указателем увеличение на единицу будет означать увеличение адреса, который хранится в указателе, на размер типа указателя.

3.Пространство имён — некоторое множество, под которым подразумевается модель, абстрактное хранилище или окружение, созданное для логической группировки уникальных идентификаторов (то есть имён).

Идентификатор, определённый в пространстве имён, ассоциируется с этим пространством. Один и тот же идентификатор может быть независимо определён в нескольких пространствах. Таким образом, значение, связанное с идентификатором, определённым в одном пространстве имён, может иметь (или не иметь) такое же значение, как и такой же идентификатор, определённый в другом пространстве. 

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

Всё, что объявляется внутри блока кода — доступно внутри блока и только внутри собственного блока.

Локальные переменные — это переменные некоторого блока кода, доступные только внутри собственного блока.

Глобальные переменные — это такие переменные, которые доступны по всей программе, в любом блоке кода.

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

Консольные ввод/вывод:По умолчанию язык C++ не содержит встроенных средств для ввода с консоли и вывода на консоль, эти средства предоставляются библиотекой iostream. В ней определены два типа: istream и ostream. istream представляет поток ввода, а ostream - поток вывода. Вообще сам термин "поток" в данном случае представляет последовательность символов, которая записывается на устройство ввода-вывода или считывается с него. И в данном случае под устройством ввода-вывода рассматривается консоль. + cin, cout >> <<

5.Классы в С++ — это абстракция описывающая методы, свойства, ещё не существующих объектов. Объекты — конкретное представление абстракции, имеющее свои свойства и методы.

Классы в программировании состоят из свойств и методов. Свойства — это любые данные, которыми можно характеризовать объект класса.

Методы — это функции, которые могут выполнять какие-либо действия над данными (свойствами) класса.

Спецификаторы доступа:

Private - Члены класса могут использоваться только функциями- членами и дружественными функциями (классы и функции) класса;

Protected - Члены класса могут использоваться функциями- членами и дружественными функциями (классы и функции) класса. Кроме того, они могут использоваться производными классами (наследники) данного класса.

Public - Члены класса могут использоваться любой функцией.

Интерфейс класса (спецификация) — конструкция, определяющая методы и свойства, предоставляемые классом. Реализация класса — это способ осуществления работоспособности класса. Отделение интерфейса от реализации класса выполняется для того, чтобы скрыть способ осуществления работоспособности класса.

Объявление класса:

Определение и реализация.

Указатель this:

Указатель this доступен только в нестатических функциях-членах. Он указывает на объект, для которого вызывается функция-член. С помощью this можно возвращать текущий объект класса.
18. Функция friend — это функция, которая не является членом класса, но имеет доступ к закрытым и защищенным членам класса. Дружественные функции не считаются членами класса; это обычные внешние функции с особыми правами доступа.

Один класс можно сделать дружественным другому классу. Это откроет всем членам первого класса доступ к закрытым членам второго класса. 

6. Указатель -  это адрес в памяти, по которому мы получаем переменную и в итоге значение; Переменная, значением которой является адрес.

Ссылка - механизм языка программирования (C++), позволяющий привязать имя к значению. В частности, ссылка позволяет дать дополнительное имя переменной и передавать в функции сами переменные, а не значения переменных.

Разыменованием указателя называют обращение к значению по адресу, хранимому указателем.



8. Функции — это самостоятельная единица программы, которая спроектирована для реализации конкретной подзадачи. 
Функция является подпрограммой, которая может содержаться в основной программе, а может быть создана отдельно (в библиотеке). Каждая функция выполняет в программе определенные действия.

Прототип - это явное объявление функции, которое предшествует определению функции. Тип возвращаемого значения при объявлении функции должен соответствовать типу возвращаемого значения в определении функции. Если прототип функции не задан, а встретился вызов функции, то строится неявный прототип из анализа формы вызова функции.

9.Формальные параметры – это переменные, принимающие значение аргументов (параметров) функции. Если функция имеет несколько аргументов (параметров), их тип и имена разделяются запятой ‘ , ‘.

При вызове функции из другого программного кода имеет место фактический параметр.

При вызове функции фактические параметры копируются в специальные ячейки памяти в стеке (стек – часть памяти). Эти ячейки памяти отведены для формальных параметров. Таким образом, формальные параметры (через использование стека) получают значение фактических параметров. Поскольку, фактические параметры копируются в стек, то изменение значений формальных параметров в теле функции не изменит значений фактических параметров.
10.Файл – именованный набор байт, который может быть сохранен на некотором накопителе. Под файлом понимается некоторая последовательность байтов, которая имеет своё, уникальное имя, например файл.txt.

Для работы с файлами необходимо подключить заголовочный файл .

Операции для работы с файлами:

  • Открытие/закрытие файла

  • Запись/чтение файла + перемещение по файлу

  • Создание/удаление файла


16.Деструктор — специальный метод класса, который служит для уничтожения элементов класса. Чаще всего его используют тогда, когда в конструкторе, при создании объекта класса, динамически был выделен участок памяти и необходимо эту память очистить, если эти значения уже не нужны для дальнейшей работы программы.

При наследовании сначала вызываются деструкторы наследников, затем деструкторы базового класса.

Если базовый класс является абстрактным, для корректного удаления данных необходимо объявить деструктор виртуальным (virtual

Privet()), иначе удалятся только данные базового класса.

11. Visual Studio использует проекты, чтобы упорядочить код для приложения, и решения, чтобы упорядочить проекты. Проект содержит все параметры, конфигурации и правила, используемые для построения приложений и управляет связь между файлами проекта и внешние файлы. Чтобы создать приложение, во-первых, следует создать новый проект и решение.

Проект в Visual Studio — это логический контейнер, который содержат объекты, необходимые для создания приложения, например файлы исходного кода, растровые изображения, значки, а также ссылки на компоненты и службы. Когда вы создаете проект, Visual Studio создает решение, в котором будут содержаться проекты. После этого в решение при необходимости можно добавить другие новые или существующие проекты. Решения также могут содержать файлы, не связанные с определенным проектом.
12.Классы в С++ — это абстракция описывающая методы, свойства, ещё не существующих объектов. Объекты — конкретное представление абстракции, имеющее свои свойства и методы. Классы в программировании состоят из свойств и методов.

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

Виды членов:

  • Функции – члены (методы)

  • Переменные

Отличия структуры от класса:

  • По умолчанию члены структуры являются открытыми, члены класса являются закрытыми

  • Структура – это объединение различных переменных различного типа для более комфортного обращения с ними

  • В то время как класс может содержать в себе функции (методы), для работы с членами класса


15. Статические методы: Члены класса могут использоваться с ключевым словом static. Когда член класса объявляется как статический, то тем самым компилятору дается указание, что должна существовать только одна копия этого члена, сколько бы объектов этого класса ни создавалось.

Также можно иметь статические функции-члены.

Статические функции могут обращаться только к другим статическим функциям или статическим данным.

Поскольку статические методы не привязаны к определенному объекту (поэтому не имеют указателя this), то их можно вызывать напрямую через имя класса и оператор разрешения области видимости, их также можно вызвать и через объекты класса (но это не рекомендуется)

Константный метод — это метод, в котором невозможна модификация полей класса. При попытке изменения поля в константном методе, мы получим ошибку компиляции.
17. Передача по ссылке решает все эти проблемы. Для передачи переменной по ссылке – нужно просто объявить параметры функции как ссылки, а не как обычные переменные:

void func(int &x) // x - это переменная-ссылка

{x = x + 1; }

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

Константная ссылка — это ссылка на переменную, значение которой изменить через эту же ссылку не получиться никак. Конструктор копирования

Конструктор копирования, в отличие от других, в качестве параметра принимает константную ссылку на объект класса.

// Прототип конструктора копирования

Klass(const Klass &);

Данный конструктор вызывается всякий раз, когда создаётся новый объект и для его инициализации берётся значение существующего объекта того же типа.

Неявный конструктор выполняет поверхностное копирование, т. е. просто дублирует биты из переменных. Таким образом, вместо данных из динамической памяти, копируется адреса на них. В результате, появляется несколько объектов, указывающих на одну область памяти.

Перегруженная операция присваивания используется при присваивании одного объекта другому существующему объекту.

Man operator = (const Man& v1)

{if (this == &v1)

{return *this;}

this->set(v1.age, v1.name);

return *this; }

19. Инкапсуляция - это механизм, который объединяет данные и код, манипулирующий этими данными, а также защищает и то, и другое от внешнего вмешательства или неправильного использования. 

В классах для переменных и функций предусмотрена возможность установки разных уровней доступа, которые определяются тремя ключевыми словами: public, private и protected.

Интерфейс класса — конструкция, определяющая методы и свойства, предоставляемые классом. Реализация класса — это способ осуществления работоспособности класса.
20. Наследование классов позволяет создавать производные классы (классы наследники), взяв за основу все методы и элементы базового класса (класса родителя). Таким образом, экономится масса времени на написание и отладку кода новой программы. Объекты производного класса  свободно могут использовать всё, что создано и отлажено в базовом классе. При этом, мы можем в производный класс,  дописать необходимый код для усовершенствования программы: добавить новые элементы, методы и т.д.. Базовый класс останется нетронутым.

21. Диаграмма – это графическое представление набора элементов, чаще всего изображенного в виде связного графа вершин (сущностей) и путей (связей).

Графически класс изображается в виде прямоугольника, разделенного на 3 блока горизонтальными линиями:

  • имя класса

  • атрибуты (свойства) класса

  • операции (методы) класса.

 Для атрибутов и операций может быть указан один из трех типов видимости:

  • — — private (частный)

  • # — protected (защищенный)

  • + — public (общий)

Видимость для полей и методов указывается в виде левого символа в строке с именем соответствующего элемента.
24. Если порожденный класс наследует элементы одного базового класса, то такое наследование называется одиночным. Множественное наследование позволяет порожденному классу наследовать элементы более, чем от одного базового класса. Синтаксис заголовков классов расширяется так, чтобы разрешить создание списка базовых классов и обозначения их уровня доступа:

class X {…};

class Y {…};

class Z {…};

class A : public X, public Y, public Z {…};

Класс А обобщенно наследует элементы всех трех основных классов.

25. Перегруженная операция – это операция, которую мы переопределили для конкретных ситуаций для более удобной работы с объектами класса.

Man operator+(const Man &v2)

{

Man obj;

obj.set(this->age + v2.age, this->name);

return obj;}

27. Макросы - это препроцессорные "функции", т.е. «функции» созданные с помощью директивы #define, которые принимают параметры подобно функциям. После директивы #define указывается имя макроса, за которым в скобках (без пробелов) параметры, отделенные запятыми и определение макроса, отделенное пробелом.

28. Связывание – это ассоциация синтаксического элемента, содержащего имя метода, с логической частью программы.

Обычно, когда мы говорим о «раннем связывании» мы имеем ввиду «связывание, выполняемое компилятором и результат связывания «зашивается» в сгенерированный код»; если связывание завершается неудачно, то программа не запускается, поскольку компилятор не может перейти к фазе генерации кода. Под «поздним связыванием» мы подразумеваем, что «некоторая часть связывания будет выполняться во время выполнения» и, таким образом, ошибки связывания проявятся только во время выполнения. Раннее и позднее связывание иногда называют «статическим» и «динамическим связыванием»; статическое связывание выполняется на основе «статической» информации, известной компилятору, а динамическое связывание выполняется на основе «динамической» информации, известной только во время выполнения.

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

Любой шаблон начинается со слова template, будь то шаблон функции или шаблон класса. После ключевого слова template идут угловые скобки — < >, в которых перечисляется список параметров шаблона. Каждому параметру должно предшествовать зарезервированное слово class или typename.

30. Шаблоны позволяют создавать параметризованные классы и функции. Параметром может быть любой тип или значение одного из допустимых типов

31.Перегрузка функций — возможность использования одноимённых функций в языках программирования. Перегружаемые функции имеют одинаковое имя, но разное количество или типы аргументов. Вопрос о том, какую из функций вызвать, решается по списку её аргументов. Перегруженная функция фактически представляет собой несколько разных функций, и выбор подходящей происходит на этапе компиляции. При перегрузке функций используется статическое (ранее) связывание. Это означает, что объект и вызов функции связываются между собой на этапе компиляции. Это означает, что вся необходимая информация для того, чтобы определить, какая именно функция будет вызвана, известна на этапе компиляции программы.


33. Язык С++ позволяет присваивать параметрам функции значения по умолчанию в том случае, когда при вызове функции не указываются параметры.

Например, ниже объявляется функция f(), имеющая аргументом целую переменную, значением которой по умолчанию является величина 1:

void f (int i = 1) { ... }

Также можно использовать параметры со значениями по умолчанию в конструкторе объекта.

35.

Man operator = (const Man& v1){

if (this == &v1)

{

return *this;

}

this->set(v1.age, v1.name);

return *this;}
Man operator+(const Man &v2){

Man obj;

obj.set(this->age + v2.age, this->name);

return obj;}
Man operator + (int x){

Man obj;

obj.set(this->age + x, this->name);

return obj;}

Man& operator ++ (int){

this->age++;

return *this;}

Man& operator += (int x){

this->age += x;

return *this;}
bool operator == (const Man &v2){

if (this->age == v2.age) {

return true;}

return false;}

bool operator != (const Man &v2){

return !(this->age == v2.age);}

bool operator < (const Man &v2){

return (this->age < v2.age);}
friend ostream& operator << (ostream& os, const Man& v1);

friend istream& operator >> (istream& is, Man& v1);};
// перегрузка потоковых операторов

ostream& operator << (ostream& os, const Man& v1){

os << "Имя человека: " << v1.name << endl << "Возраст человека: " << v1.age;

return os;}
istream& operator >> (istream& is, Man& v1){

cout << "Введите имя человека: ";

is >> v1.name;

cout << endl << "Введите возраст человека: ";

is >> v1.age;

return is;}

Перегрузка унарной операции

Перегрузка бинарной операции

Перегрузка операций индексирования и вызова функции

Перегрузка операции присваивания

Перегрузка операций выделения памяти

void *operator new(size_t size); void operator delete (void *);
36. Любой оператор может быть перегружен в форме функции класса. Используйте перегрузку в форме функции класса, если только у вас не найдется веских причин для перегрузки внешней функцией. Из этих причин наиболее распространены следующие:

1. Первый аргумент относится к базовому типу (например, int или double).

2.Тип первого аргумента определен в коммерческой библиотеке, которую нежелательно модифицировать.

Компилятор ищет перегрузку в форме функций класса, просматривая левую часть бинарных операторов и единственный аргумент унарных. Если ваш тип указывается справа и вы хотите воспользоваться перегрузкой в форме функции класса, вам не повезло. Самый распространенный пример перегрузки в форме внешней функции — оператор << в библиотеке ostream. Перегрузка должна осуществляться в форме внешней функции, поскольку ваш тип, String, находится справа — если, конечно, вы не хотите залезть в готовые заголовки iostream.h и включить в класс ostream перегрузку в форме функции класса для своего класса String.
39. Абстрактные классы - это классы, которые содержат или наследуют без переопределения хотя бы одну чистую виртуальную функцию. Абстрактный класс определяет интерфейс для переопределения производными классами.

Т.к. абстрактные функции содержат чистую виртуальные функции, т.е. функции, которые предназначены для переопределения в наследственных классах, они не имеют реализации, лишь только объявления.

40. Виртуальные функции — специальный вид функций-членов класса. Виртуальная функция отличается об обычной функции тем, что для обычной функции связывание вызова функции с ее определением осуществляется на этапе компиляции. Для виртуальных функций это происходит во время выполнения программы.

Виртуальная функция — это функция, которая определяется в базовом классе, а любой порожденный класс может ее переопределить.

Чистая виртуальная функция — это функция-член класса, тело которой не определено.
42. Виртуальные базовые классы, используемые в виртуальном наследовании, являются способом предотвращения множественных "экземпляров" данного класса, которые появляются в иерархии наследования при использовании множественного наследования.

Рассмотрим следующий сценарий:

class A { public: void Foo() {} };

class B : public A {};

class C : public A {};

class D : public B, public C {};

Экземпляр D будет состоять из B, который включает A и C, который также включает A. Таким образом, у вас есть два "экземпляра" (из-за лучшего выражения) A.

Когда у вас есть этот сценарий, у вас есть возможность двусмысленности. Что происходит, когда вы это делаете:

D d;


d.Foo(); // is this B Foo() or C Foo() ??

Виртуальное наследование позволяет решить эту проблему. Когда вы указываете virtual при наследовании своих классов, вы сообщаете компилятору, что вам нужен только один экземпляр.

class A { public: void Foo() {} };

class B : public virtual A {};

class C : public virtual A {};

class D : public B, public C {};

Это означает, что в иерархии есть только один экземпляр A. Следовательно

D d;

d.Foo(); // no longer ambiguous
43. В языке программирования C++ деструктор полиморфного базового класса должен объявляться виртуальным. Только так обеспечивается корректное разрушение объекта производного класса через указатель на соответствующий базовый класс.

При этом не следует забывать, что деструктор по умолчанию виртуальным не будет, поэтому следует объявить его явно.

Происходит это потому, что удаление производится через указатель на базовый класс и для вызова деструктора компилятор использует раннее связывание. Деструктор базового класса не может вызвать деструктор производного, потому что он о нем ничего не знает. В итоге часть памяти, выделенная под производный класс, безвозвратно теряется.

47. Контейнерные классы - это универсальные шаблонные классы, предназначенные для хранения элементов заданного типа в смежных областях памяти. Стандарт C++ уже включает в себя большое количество контейнеров, как часть STL (Standard Template Library -- Стандартная Библиотека Шаблонов).

- векторы

- списки

- словари (map)

- контейнеры указателей

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

int foo[10];

Массивы, созданные с помощью operator new[], имеют динамическую продолжительность хранения и хранятся в куче (технически "свободный магазин" ). Они могут иметь любой размер, но вам нужно выделять и освобождать их самостоятельно, так как они не являются частью фрейма стека:

int* foo = new int[10];

delete[] foo;

53. Итератор — это такая структура данных, которая используется для обращения к определенному элементу в контейнерах STL. Обычно из используют с контейнерами set, list , а у вектора для этого применяют индексы.

54.Списком называется упорядоченное множество, состоящее из переменного числа элементов, к которым применимы операции включения, исключения.

Список, отражающий отношения соседства между элементами, называется линейным.

Списки представляют собой способ организации структуры данных, при которой элементы некоторого типа образуют цепочку. Для связывания элементов в списке используют систему указателей. В минимальном случае, любой элемент линейного списка имеет один указатель, который указывает на следующий элемент в списке или является пустым указателем, что интерпретируется как конец списка. Каждый список имеет особый элемент, называемый указателем начала списка (головой списка), который обычно по содержанию отличен от остальных элементов.





55.


57.Не существует серьезной библиотеки, которая бы не включала в себя свой класс для представления строк. STL - строки поддерживают как формат ASCII, так и формат Unicode.

 string - представляет из себя коллекцию, хранящую символы char в формате ASCII. Для того, чтобы использовать данную коллекцию, необходимо включить #include .


56. Списком называется упорядоченное множество, состоящее из переменного числа элементов, к которым применимы операции включения, исключения. Массив — это набор однотипных данных.

Минусом списка, в сравнении его с массивом, является отсутствие возможности работать с данными в режиме произвольного доступа, т. е. список – структура последовательного доступа, в то время как массив – произвольного. Последний недостаток снижает эффективность ряда операций.

Преимущества списков: можно легко вставлять, удалять элементы, сортировать. Для расположения в памяти не требует одного большого куска, а много маленьких, поэтому больше вероятность, что ему памяти хватит.

Недостатки: требует больше памяти на указатели, доступ к элементам последовательный.

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

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

Вывод: Если количество элементов заранее известно или не будет часто изменяться - используем массив, иначе - список. Если часто выполняются операции удаления элемента из середины структуры с заданным значением, например - используем список. Если нельзя обойтись без произвольного доступа - используем массив.
58. Представленный в C++11, std::array — это фиксированный массив, который не распадается в указатель при передаче в функцию. std::array определяется в заголовочном файле , внутри пространства имен std.

Объявление переменной std::array следующее:

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

Представленный в C++, std::vector (или просто вектор) – это тот же динамический массив, но который может сам управлять выделенной себе памятью. Это означает, что вы можете создавать массивы, длина которых задается во время выполнения, без использования операторов new и delete (явного указания выделения и освобождения памяти). std::vector находится в заголовочном файле .






60.



написать администратору сайта