Вход/Регистрация
Справочное руководство по C++
вернуться

Страустрап Бьярн

Шрифт:

 "Weinberger P.J.", "pjw", 11273,

 "Schryer N.L.", "nls", 11274,

 "Schryer N.L.", "nls", 11275,

 "Kernighan B.W.", "bwk", 11276

};

typedef int (*CFT)(char*,char*);

void sort(char* base, unsigned n, int sz, CFT cmp)

{

 for (int i=0; i‹n-1; i++)

for (int j=n-1; i‹j; j--) {

char* pj = base+j*sz;

char *pj1 = pj-sz;

if ((*cmp)(pj,pj1) ‹ 0)

// swap b[j] and b[j-1]

for (int k=0; k‹sz; k++) {

char temp = pj[k];

pj[k] = pj1[k];

pj1[k] = temp;

}

}

}

void print_id(Puser v, int n)

{

 for (int i=0; i‹n; i++)

cout ‹‹ v[i].name ‹‹ "\t"

‹‹ v[i].id ‹‹ "\t"

‹‹ v[i].dept ‹‹ "\n";

}

extern int strcmp(char*, char*);

int cmp1(char* p, char* q)

{

 return strcmp(Puser(p)-›name, Puser(q)-›name);

}

int cmp2(char* p, char* q)

{

 return Puser(p)-›dept - Puser(q)-›dept;

}

main

{

 sort((char*)heads,6,sizeof(user),cmp1);

 print_id(heads,6);

 cout ‹‹ "\n";

 sort ((char*)heads,6,sizeof(user),cmp2);

 print_id(heads,6); // in department number order

}

b5_3_2.cxx

#include ‹stream.hxx›

class intset {

 int cursize, maxsize;

 int *x;

public:

 intset(int m, int n);

 ~intset;

 int member(int t);

 void insert(int t);

 void iterate(int& i) { i = 0; }

 int ok(int& i) { return i‹cursize; }

 int next(int& i) { return x[i++]; }

};

extern void exit (int);

void error(char *s)

{

 cout ‹‹ "set: " ‹‹ s ‹‹ "\n";

 exit(1);

}

extern int atoi(char *);

extern int rand;

int randint (int u) // in the range 1…u

{

 int r = rand;

 if (r ‹ 0) r = -r;

 return 1 + r%u;

}

intset::intset(int m, int n)

{

 if (m‹1 || n‹m) error("illegal intset size");

 cursize = 0;

 maxsize = m;

 x = new int[maxsize];

}

intset::~intset

{

 delete x;

}

void intset::insert(int t)

{

 if (++cursize › maxsize) error("too many elements");

 int i = cursize-1;

 x[i] = t;

while (i›0 && x[i-1]›x[i]) {

 int t = x[i];

 x[i] = x[i-1];

 x[i-1] = t;

 i--;

 }

}

int intset::member(int t)

  • Читать дальше
  • 1
  • ...
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: