⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tlist.cc

📁 早期freebsd实现
💻 CC
字号:
/* test/demo of generic lists*/#include <assert.h>#define tassert(ex) {if ((ex)) cerr << #ex << "\n"; \                       else _assert(#ex, __FILE__,__LINE__); }#include <stream.h>#include "iList.h"int int_compare(int a, int b){  return a - b;}int inc(int x){  return x + 1;}int plus(int x, int y){  return x + y;}void printint(int x){  cout << x << " ";}void print(intList& l){  l.apply(printint);  cout << "\n";}int is_odd(int x){  return x & 1;}int is_even(int x){  return (x & 1) == 0;}intList sequence(int lo, int hi){  if (lo > hi)    return intList();  else    return intList(lo, sequence(lo+1, hi));}int old_rand = 9999;int get_rand(){    old_rand = ((long)old_rand * (long)1243) % (long)971;    return old_rand;}intList randseq(int n){  if (n <= 0)    return intList();  int value = get_rand() % 50;  return intList(value, randseq(--n));}main(){  intList a = sequence(1, 20);  cout << "\nintList a = sequence(1, 20);\n"; print(a);  assert(a.OK());  for (int i = 0; i < 20; ++i) assert(a[i] == i + 1);  assert(a.position(2) == 1);  intList b = randseq(20);  cout << "\nintList b = randseq(20);\n"; print(b);  intList c = concat(a, b);  cout << "\nintList c = concat(a, b);\n"; print(c);  assert(c.contains(a));  assert(c.contains(b));  assert(!(c.find(a).null()));  assert(c.find(b) == b);  intList d = map(inc, a);  for (i = 0; i < 20; ++i) assert(d[i] == a[i] + 1);  cout << "\nintList d = map(inc, a);\n"; print(d);  intList e = reverse(a);  cout << "\nintList e = reverse(a);\n"; print(e);  for (i = 0; i < 20; ++i) assert(e[i] == a[19 - i]);  intList f = select(is_odd, a);  cout << "\nintList f = select(is_odd, a);\n"; print(f);  intList ff = select(is_even, f);  assert(ff.null());  int  red = a.reduce(plus, 0);  cout << "\nint  red = a.reduce(plus, 0);\n"; cout << red;  int second = a[2];  cout << "\nint second = a[2];\n"; cout << second;  intList g = combine(plus, a, b);  cout << "\nintList g = combine(plus, a, b);\n"; print(g);  for (i = 0; i < 20; ++i) assert(g[i] == a[i] + b[i]);  g.del((intPredicate)is_odd);  cout << "\ng.del(is_odd);\n"; print(g);  ff = select(is_odd, g);  assert(ff.null());  b.sort(int_compare);  for (i = 1; i < 20; ++i) assert(b[i] >= b[i-1]);  cout << "\nb.sort(int_compare);\n"; print(b);  intList h = merge(a, b, int_compare);  cout << "\nintList h = merge(a, b, int_compare);\n"; print(h);  for (i = 1; i < 40; ++i) assert(h[i] >= h[i-1]);  for (Pix p = a.first(); p; a.next(p)) assert(h.contains(a(p)));  for (p = b.first(); p; b.next(p)) assert(h.contains(b(p)));  cout << "\nh via Pix:\n";  for (p = h.first(); p; h.next(p)) cout << h(p) << ", ";  cout << "\n";  assert(a.OK());  assert(b.OK());  assert(c.OK());  assert(d.OK());  assert(e.OK());  assert(f.OK());  assert(g.OK());  assert(h.OK());  cout << "\ndone\n";}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -