Ассоциативные контейнеры

Перечисления

Иноrда возникает необходимость обрисовать в проrрамме свой тип, содержащий оrраниченное количество значений. Сделать это можно, используя ключевое слово еnum, к примеру:

еnum days {su, то, tu, we, th, fr, sa};

Потому что для внутреннего представления частей перечисления использу­ются целые значения, то можно найти тип

еnum modes {LASTMODE ­ =1, BW40­O, С Ассоциативные контейнеры40, BW80, С80, MONO= 7};

В каком значение LASTMODE равно ­1, значения С40, BW80 и С80 соответственно будут равны 3, 4 и 5, а MONO равно 7. Внедрение этих типов так же просто, как и целочисленных..

Задание 1. Получить итог программки и проанализировать его.

#include

#include

#include

int main(int argc, char* argv[])

{

enum modes {LASTMODE=1, BW40O, C Ассоциативные контейнеры40, BW80, C80, MONO=7};

std::cout << "LASTMODE " << LASTMODE << endl;

std::cout << " BW40O " << BW40O << endl;

std::cout << " C80 " << C80 << endl;

std::cout << " MONO " << MONO << endl;

getch();

return 0;

}

Задание 2. Получить итог программки и проанализировать его

#include

#include

#include

int main(int argc, char* argv[])

{ enum Color {Red,Green,Yellow }rr Ассоциативные контейнеры;

struct ccc

{ char Color[6];

};

ccc mc[3];

strcpy(mc[0].Color,"Red");

strcpy(mc[1].Color,"Green");

strcpy(mc[2].Color,"Yellow");

for ( rr=Red; rr<= Yellow; rr=rr+1)

std::cout << "Color " << mc[rr].Color << endl;

getch();

return 0;

}

//---------------------------------------------------------------------------

Тип объединение union – определяет единственный адресок, по которому располагаются все его элементы.

Задание 3. Получить итог программки и проанализировать Ассоциативные контейнеры его

#include

#include

#include

int main(int argc, char* argv[])

{union ddd

{

char x[9];

char y[9];

} rr;

strcpy(rr.x ,"My string") ;

cout << "rr.x=" << rr.x << endl;

cout << "rr.y=" << rr.y << endl;

getch();

return 0;

}

Пузырьковая сортировка

Если представить массив, к примеру, из 5 частей (4 3 5 2 1), «поставленный» вертикально, с нулевым Ассоциативные контейнеры элементом наверху и четвертым — понизу, то пузырьковая сортировка проходит по массиву снизу ввысь. Каждый элемент массива сравнивается с тем, что находится конкретно над ним, и если последний больше, делается перестановка 2-ух этих частей. К примеру, нижний элемент (с индексом 4 – это 1) оказывается минимальным. Метод сортировки ассоциирует его со значением элемента с индексом 3 (который Ассоциативные контейнеры равен 2) и решает поменять их местами. Потом он ассоциирует элемент с элементом с индексом 2 и также меняет их. Процесс длится до того времени, пока меньший элемент не «всплывает», подобно пузырьку воздуха, на самый верх. На этот момент элемент с индексом 0 имеет правильное значение, и при следующих проходах метода его Ассоциативные контейнеры можно игнорировать. Потом пузырьковая сортировка применяет ту же самую функцию к подмассиву, состоящему из частей с индексами от 1 до 4, в итоге чего в позиции 1 также оказывается правильное значение (в этом случае 2). Сортировка длится в том же духе, сканируя все наименьшие подмассивы, пока они не будут исчерпаны Ассоциативные контейнеры. К этому моменту весь массив будет верно сортирован.

Задание 4. Выполнить пузырьковую сортировку

#include

#include

#include

inline void swap(int array[], int posl, int pos2)

{

int temp;

temp = array[posl];

array[posl] = array[pos2];

array[pos2] = temp;

}

inline void print(int array[], int size)

{

int i;

for (i=0; i < size; ++i) {

cout << array[i Ассоциативные контейнеры] << " ";

}

cout << endl;

}

inline void bubble_sort(int array[], int size)

{

int i, j;

for (i=0; i < size-1; ++i) {

for (j=size-1; j > i; --j )

{

if (array[j-1] > array[j]) swap(array, j-1, j);

}

}

}

int main( )

{

int array_1[] = {7, 3, 8, 2, 1, 5, 4};

print(array_1, 7);

bubble_sort(array_1, 7);

print (array_1, 7) ;

cout << endl Ассоциативные контейнеры;

int array_2[] = {7, 3, 8, 2, 1, 5, 4, 9, 75, -5};

print(array_2, 10);

bubble_sort(array_2, 10);

print(array_2, 10);

cout << endl;

int array_3[] = {1, 2, 3};

print(array_3, 3);

bubble_sort(array_3, 3);

print(array_3, 3) ;

cout << endl;

int array_4[] = {3, 2, 1};

print(array_4, 3);

bubble_sort(array_4, 3);

print(array_4, 3);

cout << endl;

int array_5[] = {5, 2, 1, 3};

print(array_5, 4);

bubble_sort(array_5, 4) ;

print(array_5, 4);

cout << endl;

int array_6[] = {3, 3, 3};

print(array_6, 3);

bubble_sort(array Ассоциативные контейнеры_6, 3);

print(array_6, 3);

cout << endl;

getch();

return 0;

}

Выборочная сортировка

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

Если подвергнуть выборочной сортировке массив из предшествующего пт, то метод

сортировки также будет просматривать подмассивы, отыскивая всякий раз малое значение. Но заместо обмена пар примыкающих значений, стоящих не в Ассоциативные контейнеры том порядке, метод просто записывает индекс малого значения и потом производит единственный обмен его со значением, которое занимает на этот момент верхнюю позицию в подмассиве. 1-ый проход по массиву находит, что малое значение, равное 1, занимает 4-й элемент. Как это определено, элементы нулевой и 4-ый обмениваются значениями. Потом выборочная сортировка Ассоциативные контейнеры сканирует все наименьшие и наименьшие подмассивы, аналогично пузырьковой сортировке.

Задание 5.Выполнить выборочную сортировку

#include

#include

#include

inline void swap(int array[], int pos1, int pos2)

{

int temp;

temp = array[pos1];

array[pos1] = array[pos2];

array[pos2] = temp;

}

inline void print(int array[], int size)

{

int i;

for (i=0; i < size Ассоциативные контейнеры; ++i) {

cout << array[i] << " ";

}

cout << endl;

}

// Get_min_index( ) возвращает индекс массива, соответственный

// наименьшему значению подмассива, определяемому

// left и right.

inline int get_min_index(int array[], int left, int right)

{

int min_index = left;

int i;

for (i = left; i <= right; ++i) {

if (array[i] < array[min_index]) min_index = i;

}

return min Ассоциативные контейнеры_index;

}

inline void selection_sort(int array[], int size)

{

int i;

int min_index;

for (i=0; i < size-1; ++i) {

min_index = get_min_index(array, i, size-1);

if (min_index != i) swap(array, i, min_index) ;

}

}

int main( )

{

int array_1[] = {7, 3, 8, 2, 1, 5, 4};

print(array_1, 7);

selection_sort(array_1, 7);

print Ассоциативные контейнеры (array_1, 7) ;

cout << endl;

int array_2[] = {7, 3, 8, 2, 1, 5, 4, 9, 75, -5};

print(array_2, 10);

selection_sort(array_2, 10);

print(array_2, 10);

cout << endl;

int array_3[] = {1, 2, 3};

print(array_3, 3);

selection_sort(array_3, 3);

print(array_3, 3) ;

cout << endl;

int array_4[] = {3, 2, 1};

print(array_4, 3);

selection_sort(array_4, 3);

print(array_4, 3);

cout << endl;

int array_5[] = {5, 2, 1, 3};

print(array_5, 4);

selection_sort(array_5, 4) ;

print(array_5, 4);

cout << endl;

int array_6[] = {3, 3, 3};

print(array Ассоциативные контейнеры_6, 3);

selection_sort(array_6, 3);

print(array_6, 3);

cout << endl;

getch();

return 0;

}

Перечень

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

Класс-контейнер list определён в файле заголовка в пространстве имён std. Класс list реализован как двунаправленный перечень, в каком каждый блок содержит указатели как на Ассоциативные контейнеры предшествующий, так и на следующий блок перечня. Перечень можно пройти, следуя по связям меж блоками, реализуемых обычно при помощи указателей. Для этой же цели стандартный класс контейнера перечня употребляет механизм, именуемый итератором.

Итератор – это обобщение указателя. На итератор можно ссылаться, чтоб перейти к блоку, на который он показывает.

Задание 3. Демонстрация внедрение итератора Ассоциативные контейнеры для доступа к блокам в перечне.

#include

#include

#include

#include

using namespace std;

typedef list IntegerList;

int main(int argc, char* argv[])

{

IntegerList intList; // intList определён как перечень целых чисел

// При помощи функции push_back в перечень добавляются 1-ые 10 положительных

// чётных чисел

for (int i=1; i<=10; ++i)

intList.push_back(i*2);

// При помощи Ассоциативные контейнеры итератора const_iterator осуществляется доступ к каждому блоку перечня

for (IntegerList::const_iterator ci = intList.begin(); // Функция begin() возвращает итератор к

ci !=intList.end(); ++ci) // к первому блоку перечня

cout << *ci << " ";

getch();

return 0;

}

Класс перечня обладает ещё 2-мя функциями – push_front() (добавить в начало) и pop_ front() (удалить 1-ый Ассоциативные контейнеры), которые работают аналогично функциям push_back() и pop_back(). Но заместо прибавления и удаления частей в конце, они добавляют и убирают элементы сначала перечня.

Ассоциативные контейнеры

Элементы ассоциативных контейнеров представляют собой пары «ключ-значение». Зная ассоциированный со значениемключ (key), можно получить доступ к значению, которое нередко называетсяотображаемым значением. Ассоциативный контейнер обеспкчивают случайный доступ, основанный Ассоциативные контейнеры на главных значениях.

Стандартная библиотека С++ содержит четыре ассоциативных контейнеров: map, multimap, set и multiset.

Задание 6. Демонстрация поиска элемента с внедрение ассоциативного контейнера map.

#include

#include

#include

#include

typedef std::map mymap;

//---------------------------------------------------------------------------

int main(int argc, char* argv[])

{ mymap charMap; // для ключей1, 2, 3, 4, 5 вводим нужные значения

charMap[1]= 'A';

charMap Ассоциативные контейнеры[4]= 'D';

charMap[2]= 'B';

charMap[5]= 'E';

charMap[3]= 'C';

std::cout << "Content of map" << std::endl;

mymap::iterator iter;

for (iter = charMap.begin(); iter != charMap.end(); iter++)

{

std::cout << (*iter).first <" ;

std::cout << (*iter).second << std::endl;

}

mymap::iterator pos = charMap.find(4);

if (pos == charMap.end())

std::cout << "Element not Ассоциативные контейнеры found" ;

else std::cout << "Element found: " << (*pos).second;

getch();

return 0;

}

Отладчик

Отладчик помогает отыскивать ошибки и также является инвентарем разработки. По Run программка запускается автоматом под управлением отладчика.

Контрольная точка (КТ, breakpointer) – это маркер, который показывает отладчику остановить выполнение программки по достижении данной точки.

- Избрать КТ можно :

- надавить кнопку F Ассоциативные контейнеры5

- щёлкнуть слева от подходящего оператора

(для удаления КТ те же деяния)

Для вызова окна перечня контрольных точек (КТ) – View/ Debug Windows/ BreakPoint

В КТ можно

- просматривать переменные через перечень объектов наблюдения (Watch List).

Добавлять переменные в перечень Watch List можно

  1. щёлкнуть на имени переменной в окне редактора кода правой кнопкой и избрать пункт Ассоциативные контейнеры Debug/Add Watch at Cursor (Добавить объект наблюдения в позиции курсора)
  2. надавить Ctrl+ F5 – появится диалоговое окно Watch Properties по ОК объект будет добавлен в перечень.
  3. п. Run/Add Watch – появится диалоговое окно Watch Properties

После заслуги КТ перечень Watch List покажет текущие значения всех переменных, которые были в Ассоциативные контейнеры него включены. Если перечень закрыт, его можно вывести, выбрав в гл. меню п. View/ Debug Windows/ Watches.


artyur-rembo-stihi-stranica-9.html
arul-perun-dzhoti-svet-visshej-mudrosti.html
as-chertovikova-starshij-prepodavatel-kafedri-obshej-psihologii-kandidat-psihologicheskih-nauk-major-vnutrennej-sluzhbi.html