Чтобы задать смысл индексов для объектов класса используется функция operator[]. Второй параметр (индекс) функции operator[] может быть любого типа. Это позволяет определять ассоциативные массивы и т.п. В качестве примера давайте перепишем пример , где при написании небольшой программы для подсчета числа вхождений слов в файле применялся ассоциативный массив. Там использовалась функция. Здесь определяется надлежащий тип ассоциативного массива:
struct pair {
char* name;
int val;
};
class assoc {
pair* vec;
int max;
int free;
public:
assoc(int);
int& operator[](char*);
void print_all();
};
В assoc хранится вектор пар pair длины max. Индекс первого неиспользованного элемента вектора находится в free. Конструктор выглядит так:
assoc::assoc(int s)
{
max = (s<16) ? s : 16;
free = 0;
vec = new pair[max];
}
При реализации применяется все тот же простой и неэффективный метод поиска. Однако при переполнении assoc увеличивается:
#include
int assoc::operator[](char* p)
/*
работа с множеством пар "pair":
поиск p,
возврат ссылки на целую часть его "pair"
делает новую "pair", если p не встречалось
*/
{
register pair* pp;
for (pp=&vec[free-1]; vec<=pp; pp--)
if (strcmp(p,pp->name)==0) return pp->val;
if (free==max) { // переполнение: вектор увеличивается
pair* nvec = new pair[max*2];
for ( int i=0; iname = new char[strlen(p)+1];
strcpy(pp->name,p);
pp->val = 0; // начальное значение: 0
return pp->val;
}
Поскольку представление assoc скрыто, нам нужен способ его печати. В следующем разделе будет показано, как определить подходящий итератор, а здесь мы используем простую функцию печати:
vouid assoc::print_all()
{
for (int i = 0; i>buf) vec[buf]++;
vec.print_all();
Похожие работы
... , субъективен и зависит во многом от того насколько хорошо вы знакомы со средой разработки, "видите" реализацию кода и насколько быстро набираете его. Пример последний или почему "индексированные элементы управления"? Чтобы понять, почему корректнее в некоторых случаях говорить "индексированные элементы управления c общим именем", а не "массив элементов управления" рассмотрим ...
... ли таблица независимой или же она будет принадлежать какой-либо базе данных. На третьем шаге программист может модифицировать выбранные поля (изменить имя, тип, ширину). На четвёртом шаге можно произвести индексирование таблицы по полю (полям). На пятом шаге программист может определить, как именно он хочет сохранить таблицу: просто сохранить её на жёсткий диск, сохранить её на жёсткий диск и ...
... 100% -ной надбавкой; Какой предмет студенты сдали хуже других предметов; Какой предмет студенты сдали лучше других предметов. Согласно этим пунктам в процессе разработки базы данных созданы запросы, позволяющие пользователю, то есть работнику деканата, быстро и без особых усилий найти необходимую ему информацию: об успеваемости студентов с указанием их фамилий, о средних баллах по предметам, о ...
... посредством ввода различных групп пользователей и запроса пароля. Разработка имеет интуитивно понятный графический интерфейс, позволяющий даже с минимальным знанием компьютера провести автоматизацию учета студентов в ВУЗе. Таким образом, система готова к эксплуатации. Она может обеспечить пользователю поступление необходимой информации, а также облегчить получение статистических наблюдений. ...
0 комментариев