Пример простой программы с windows окном
Пример текста
________________________________________________
РАЗДЕЛ 6
ПОЛЕЗНЫЕ ДОПОЛНЕНИЯ
Вектор
Мы привыкли использовать массивы, но в с++ также есть добавленный шаблон класса, упрощающий работу с массивами- вектор. Фундаментально он разработан на основе массивов, но программисту не нужно вникать как он работает- он может просто спокойно использовать то что за него уже сделали более продвинутые и профессиональные разработчики.
Для работы с векторами нам нужно подключить соответствующую библиотеку:
#include <vector>
Создаётся вектор так же, как мы делали со стеком или очередью- это шаблон класса, поэтому нужно указывать тип, например: vector <int> x;
Инициализация такого типа: vector <int> v= {1,2,3,4,5}; у меня в devcpp не работала- говорят что нужна версия с++ 11.
Можно инициализировать так:
vector <int> v(3);
v[0]=5; v[1]=7; v[2]=8; cout << v[1] << endl;
Можно работать с векторами как с обычными массивами, но тут есть ряд расширений функционала, сейчас посмотрим ниже.
1. Сравнение векторов- происходит как сравнение обычных переменных:
vector <int> a(3), b(3);
for (int i=0; i<3; i++) {
a[i]= i*i; b[i]= i*i;
}
if (a==b) cout << "Равны" << endl;
2. Размер вектора: cout << a.size() << endl; // для нашего вектора выведет 3
Можно использовать в цикле:
for (int i=0; i<a.size(); i++) делать что-то там
3. Узнать, пустой ли вектор: a.empty() - логический метод.
4. Добавление элемента в конец вектора:
vector <int> a(3);
for (int i=0; i<a.size(); i++) a[i]= (i+1)*(i+2);
|
|
a.push_back(19);
И теперь уже можно выводить элемент a[3], он создался благодаря методу push_back. Также изменился размер вектора, теперь он равен 4.
5. Удаление последней ячейки: a.pop_back(); т.е. это уже наоборот- удалить то что мы только сейчас создали. Теперь размер вектора снова равен 3, но при этом a[3] всё так же доступен и можно вывести, будет 19. Можно обнулить так: a[3]= NULL;
Функции добавления и удаления можно использовать в цикле.
6. Вставка элемента в начало вектора:
a.insert(a.begin(),18);
И можно всё вывести: for (int i=0; i<a.size(); i++) cout << a[i] << " "; // 18 2 6 12 19
А такая команда аналогична push_back: a.insert(a.end(),18);
Стоит помнить, что добавление элементов в начало замедляет программу, поэтому стараемся добавлять только в конец.
7. Значение первой ячейки: a.front(); Последней- a.back();
8. Как создать вектор векторов:
vector < vector <int> > a;
Т.е. мы создали вектор из векторов типа int.
Если у нас есть некоторый вектор x, т.е. мы можем добавить его в наш вектор векторов:
a.push_back ( vector<int>(x));
Пусть у меня: vector <int> x; x.push_back(3); x.push_back(8);
Можно выводить элементы как у двумерного массива: cout << a[0][1] << endl; // выведет 8
Отсюда следует, что можно создавать "неровные" двумерные массивы благодаря векторам, т.е. у нас будет вектор из векторов разного размера. И это будет нормально восприниматься программой. Ниже пример из вектора 2 векторов, где у первого 2 элемента, а у второго 1:
|
|
vector <int> x; x.push_back(3); x.push_back(8);
vector <int> y; y.push_back(6);
vector < vector <int> > a;
a.push_back ( vector<int>(x));
a.push_back ( vector<int>(y));
Под размером вектора векторов будет выводиться количество векторов, что в принципе логично- просто это стоило пояснить. На этом мы закончим данную главу.
Структуры, перечисляемые типы и пространства имён
Для ООП (объектно-ориентированного программирования), как известно, мы используем классы. Но если в языке нет ООП, мы всё равно можем объединять разные типы в одно. В с++ тоже так можно делать, тут это называется структура. В отличие от классов, тут нет инкапсуляции, наследования и полиморфизма. Все поля по умолчанию public, т.е. общедоступны. Вот например структура для точки:
struct point {
double x, y; };
Объявление аналогично как мы делаем в классе. И использовать можно так же:
point M; M.x= 10; и т.д. и т.п.
Также в структурах мы можем использовать и функции (методы), как мы делали в классах.
...
Перечисляемый тип- ещё один инструмент программирования. На примере:
enum week { mon=1, tue, wed, thu, fri, sat, sun}; // создаём такой тип
|
|
cout << mon << endl; // выведет 1
cout << tue << endl; // 2
cout << wed << endl; // 3
cout << thu << endl; // 4
cout << fri << endl; // 5
cout << sat << endl; // 6
cout << sun << endl; // 7
Т.е. первой переменной в перечисляемом типе (mon) мы присваиваем 1, а далее следующие будут просто инкрементироваться. По умолчанию первой переменной задаётся 0.
Или я могу присвоить так: enum week { mon, tue=4, wed, thu, fri=11, sat, sun};
Тогда выведутся числа: 0, 4, 5, 6, 11, 12, 13
Зачем это нужно? Чтобы сделать код более понятным и читаемым для человека.
...
Пространство имён- это ещё один инструмент, позволяющий нам объединять переменные в единое целое. Может использоваться для большей систематизации переменной в программе. Это больше важно именно при командном программировании, когда каждый создаёт свои переменные и не всегда понятно, кто какие переменные с какими именами уже завёл. Мы уже встречались со встроенным: using namespace std; Но мы можем создавать и свои, например:
namespace cat {
int age= 6;
void mrrow (int k) { for(int i=0;i<k;i++)cout << "Mrrow!!!" << endl;}
}
Далее можем использовать: cat::mrrow(5);
Или чтобы не писать постоянно cat:: мы можем написать так: using namespace cat; пишется это после объявления самого пространства имён cat.
#include <iostream>
using namespace std;
namespace cat {
int age= 6;
void mrrow (int k) { for(int i=0;i<k;i++)cout << "Mrrow!!!" << endl;}
}
using namespace cat;
int main() {
mrrow(5);
system("pause");
}
Дата добавления: 2018-09-22; просмотров: 290; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!