Primero, no entiendo como declaras la función add(); para añadir las cosas, quiero decir, si sólo tienes un parámetro, ¿cómo le pasas los demás? Entiendo que el index te indica si se agrega un título, un nombre... Pero, ¿el otro parámetro dónde lo recoges?
Luego, creo que sería más apropiado que tu clase sólo contenga una única agenda. En el main() (o dónde sea) haces un vector de objetos de esa clase.
El problema mayor de lo que yo digo (que no veo que tu modelo no lo tenga) es cómo buscar la agenda de un X concreto. Lo que a mi se me ocurre es que les pongas un id "ordenado", me explico:
tenemos la persona A y la persona B. Alfabéticamente A va a antes de B. Cómo sólo son 2, A tendrá el id 0 (1-1) y B el id 1 (2-1). Si añadimos AA, que irá alfabéticamente antes de B, con una búsqueda dicótomica (por ejemplo) vamos buscando el lugar dónde encaja según el nombre. Desplazamos todos los demás y lo insertamos - lo que sería la segunda parte de la ordenación por inserción -.
Para lo primero yo creo que es preferible tener una función por cada campo, una de añadir/quitar(un parámetro bool, si es 0 añades, si es 1 quitas) y otra de consultar.
P.D: puedes usar la plantilla vector, que personalmente me gusta mucho, parecida a tus arrays que también permite hacerlos de un número indeterminado:
http://cppreference.com/cppvector/index.html