Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа № 7 Сортировка.doc
Скачиваний:
2
Добавлен:
13.09.2019
Размер:
92.16 Кб
Скачать

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

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

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

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

#include <iostream.h>

#include <vcl.h>

#include <map>

#include <conio>

typedef std::map<int, char> 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) – это маркер, который указывает отладчику приостановить выполнение программы по достижении данной точки.

- Выбрать КТ можно :

- нажать клавишу F5

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

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

Для вызова окна списка контрольных точек (КТ) – 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.

Пошаговое выполнение программы

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

Есть 2 основные команды

1. Step Over – выполнение очередной строки и приостановку выполнения на следующей строке.В выполнении функцию не заходит, выполняет только как вызов. Для выполнения команды Step Over - нажать F8 или выбрать п. Run / Step Over.

2. Trace Into – позволяет войти в режим трассировки любой функции. Клавиша для этой команды F7.

После отладки можно нажать Run до следующей КТ.

Задание 7. Скопировать ниже приведённую программу в редактор кода, задать КТ и переменные в головной программе (main) и проследить в отладчике как изменяются переменные.

#include <vcl.h>

#include <iostream.h>

#include <conio.h>

void print(int array[], int size)

{

int i;

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

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

}

cout << endl;

}

void showResult(int res)

{

cout << "The result is: "<< res << endl;

}

void showResult(float res)

{

cout << "The result is: "<< res << endl;

}

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

{

int array[] = {10, 15, 3, 25, 17};

int size = 5;

print(array, size);

int y =1;

int s,p;

char r;

int i,j, ma, mi;

float s1;

while (y==1)

{

cout << endl << " Input symbol a (mean value)/ b (mi, ma, ma-mi)/c (product) " << endl;

cin >> r;

switch (r)

{ case 'a':

{s = 0;

for (int i = 0; i < 4; i++)

s = s + array[i];

s1 =(float) s/size;

showResult(s);

showResult(s1);

break; }

case 'b':

{ ma = array[1];

mi = ma;

for (int i = 0; i < 4; i++) {

if (array[i] < mi) { mi = array[i];}

if (array[i] > ma) { ma = array[i];}

}

int s = ma - mi;

showResult(ma);

showResult(mi);

showResult(s);

break; }

case 'c':

{p = 1;

for (int i = 0; i < 4; i++) {

int p = p * array[i];

}

showResult(p);

break; }

}

cout << " For continue input y = 1 (stop - any value not 1) " << endl;

cin >> y ;

} // while

//getch();

}