简单的vector和hash-table的例子

#define I(i,n) for (int i = 0; i < n; ++ i) 

// VECTOR
template <typename E>
class Vector
{
    E d[1000];
    int s;
public:
    Vector() { s=0; }
    Vector(const E & d2, int s2) : s(s2) { I(i,s2) d[i]=d2[i]; }
    int size() { return s; }
    void push_back(const E & e) { d[s]=e; ++s; }
    void pop_back() { --s; }
    E & operator[](int i) { return d[i]; }
    const E & operator[](int i) const { return d[i]; }
};

//HASH-TABLE
class NoSuchKeyException {};
template <typename K, typename V>
class Dict
{
    K k[1000];
    V v[1000];
    int s;
    int _index(const K & k2) const { 
        I(i,s) if (k[i]==k2) return i; 
        return -1;
    }
public:
    Dict() { s=0; }
    int size() { return s; }
    void put(const K & k2, const V v2) {
        int i = _index(k2);
        if (i != -1) v[i] = v2;
        else { k[s]=k2; v[s]=v2; ++s; }
    }
    bool has(const K & k2) {
        return _index(k2) != -1;
    }
    V & get(const K & k2) {
        int i = _index(k2);
        if (i != -1) return v[i];
        throw NoSuchKeyException();
    }
    const V & get(const K & k2) const {
        int i = _index(k2);
        if (i != -1) return v[i];
        throw NoSuchKeyException();
    }
};

// TEST

#include <iostream>
using namespace std;
#include "source.cpp"

int main() {
    Vector<double> v;
    I(i,10) v.push_back(1+i);
    I(i,v.size()) cout << v[i] << endl;
    
    Dict<double, double> d;
    I(i,10) d.put(1+i, 20-i);
    I(i,v.size()) cout << d.has(i+1) << endl;
}
支持 makedown语法