
- •3. Строение памяти. Системы счисления. Двоичная система счисления
- •8. Расширенные Бэкуса-Наура формы (рбнф), Способы записи синтаксиса языка: Диаграммы Вирта. Расширенные Бэкуса-Наура формы (рбнф).
- •12. Операторы выбора: оператор if, оператор switch. Операторы выбора.
- •1. Принципы объектно-ориентированного программирования. Основными свойствами ооп являются:
- •18. Создание собственных функций-манипуляторов.
- •1.Assign(const string& str);
- •31. Последовательные контейнеры.
31. Последовательные контейнеры.
Операция |
Метод |
vector |
deque |
list |
Вставка в начало |
push_front |
- |
+ |
+ |
Удаление из начала |
pop_front |
- |
+ |
+ |
Вставка в конец |
push_back |
+ |
+ |
+ |
Удаление из конца |
pop_back |
+ |
+ |
+ |
Вставка в произвольное место |
insert |
+ |
+ |
+ |
Удаление из произвольного места |
erase |
+ |
+ |
+ |
Произвольный доступ к элементу |
[], at |
+ |
+ |
- |
Примеры создания векторов:
vector <int> v2(10,1); //Создается вектор из 10 равных единице элементов: vector <int> v4 (v1); //Создается вектор, равный вектору v1 vector <int> v3 (v1.begin(), v1.begin() + 2); //Создается вектор из двух элементов, равных первым двум элементам v1 vector <monstr> m1 (10); //Создается вектор из 10 объектов класса monstr vector <monstr> m2(5,monstr("Вася"));//Создается вектор из 5 объектов класса monstr с заданным именем Например: vector <int> v1,v2; //Первым 10 элементам вектора v1 присваивается значение 1: v1.assign(10,1); //Первым 3 элементам вектора v2 присваиваются значения v1[5], v1[6], v1[7]: Ввод-вывод вектора из дробных чисел. #include <iostream> #include <vector> using namespace std; int main(int argc, char* argv[]) { using N=5; vector <double> a; //объявление вектора дробных чисел for(unsigned i=0; i<N;i++) { double x; //считываем дробное число с клавиатуры cout <<"a["<<i<<"]="; cin >> x; a.push_back(x); }//и добавляем его в конец вектора вывод вектора на экран for (unsigned i=0; i<a.size(); i++) { cout <<"a["<<i<<"]="<<a[i]<<endl;}return 0;}
Использование шаблонов классов
имя_шаблона <аргументы> имя_объекта [(параметры_конструктора)];
List <<int> List_int; List<double> List_double;
for (int i=1;i<10;i++) List_double.add(i*0.08); List_double.print(); strcpy(buf,"Важное сообщение"); cout<<buf<<endl;
Специализация шаблонов классов
Каждая версия классов или функций, создаваемая по шаблону содержит одинаковый базовый код. Изменяется только то, что связано с параметрами шаблона. При этом эффективность работы версий, создаваемых для различных типов данных может сильно различаться. Если для какого либо типа данных существует более эффективный код можно либо предусмотреть для этого типа специальную реализацию методов, либо полностью переопределить шаблон. Для переопределенного метода требуется определить вариант его кода указав в заголовке конкретный тип данных.
template <class Data> void List <Data>::print();
void List <char>::print(){ ...//Тело специализированного варианта метода print }