Ассоциативные контейнеры
Элементы ассоциативных контейнеров представляют собой пары «ключ-значение». Зная ассоциированный со значением ключ (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 можно
щёлкнуть на имени переменной в окне редактора кода правой кнопкой и выбрать пункт Debug/Add Watch at Cursor (Добавить объект наблюдения в позиции курсора)
нажать Ctrl+ F5 – появится диалоговое окно Watch Properties по ОК объект будет добавлен в список.
п. 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();
}