static int print_queue(c_pqueue ps) { c_vector tmpvt; __c_vector(&tmpvt, int_comparer); printf("queue is : \n"); while(!c_queue_empty(ps)) { int * tmp = c_queue_front(ps); printf("front is : %d, size is : %d, back is : %d\n", *tmp, c_queue_size(ps), *(int *)c_queue_back(ps)); c_queue_pop(ps); c_vector_push_back(&tmpvt, tmp); } // recover queue do { c_iterator iter = c_vector_begin(&tmpvt); c_iterator end = c_vector_end(&tmpvt); for(; !ITER_EQUAL(iter, end); ITER_INC(iter)) { c_queue_push(ps, ITER_REF(iter)); } } while(0); __c_rotcev(&tmpvt); return 0; }
static void create_with_push_back(c_vector * p) { int i = 0; for (; i < sizeof(array) / sizeof(int); ++ i) { c_vector_push_back(p, &array[i]); } }
static void vector_swap(c_vector * p) { c_vector lvt; __c_vector(&lvt, int_comparer); c_vector_push_back(&lvt, &array[3]); c_vector_swap(p, &lvt); printf("local vector is : \n"); print_vector(&lvt); printf("outside vector is : \n"); print_vector(p); __c_rotcev(&lvt); }
static int create_with_insert_unique2(c_pmap thiz) { c_vector vt; int i = 0; c_vector_create(&vt, int_comparer); for(i = 0; i < sizeof(values) / sizeof(int); ++ i) { c_iterator v_beg, v_end; c_vector_push_back(&vt, &pairs[i]); v_beg = c_vector_begin(&vt); v_end = c_vector_end(&vt); c_map_insert2(thiz, v_beg, v_end); assert(__c_rb_tree_verify(thiz->_l)); } c_vector_destroy(&vt); return 0; }
int main(int agrc, char **argv) { size_t error; c_vector *vector; // Пытаемся создать вектор емкостью CAPACITY, который содержит объекты типа object. vector = c_vector_create(sizeof(object), CAPACITY, &error); // Если вектор создать не удалось, выводим причину ошибки. if (vector == NULL) { printf("create error: %Iu\n", error); printf("Program end.\n"); getchar(); return -1; } // Вставляем в конец вектора 11 объектов. for (size_t i = 0; i < 11; ++i) { object *const obj = c_vector_push_back(vector, &error); // Если вставить объект не удалось, выводим причину ошибки. if (obj == NULL) { printf("push back error: %Iu\n", error); printf("Proogram end.\n"); getchar(); return -2; } // Инициализируем вставленный объект. obj->i = i; obj->f = i + 3.14f; } // Покажем размер вектора. { error = 0; const size_t size = c_vector_size(vector, &error); // Если size == 0 и error > 0, значит возникла ошибка. if ( (size == 0) && (error > 0) ) { printf("size error: %Iu\n", error); printf("Program end.\n"); getchar(); return -3; } // Покажем размер. printf("size: %Iu\n", size); } // Покажем емкость вектора. { error = 0; const size_t capacity = c_vector_capacity(vector, &error); // Если capacity == 0 и error > 0, значит произошла ошибка. if ( (capacity == 0) && (error > 0) ) { printf("capacity error: %Iu\n", error); printf("Program end.\n"); getchar(); return -4; } // Покажем емкость. printf("capacity: %Iu\n", capacity); } // Используя функцию обхода, выведем содержимое каждого элемента вектора. { const ptrdiff_t r_code = c_vector_for_each(vector, print_object); // Если произошла ошибка, покажем ее. if (r_code < 0) { printf("for each error, r_code: %Id\n", r_code); printf("Program end.\n"); getchar(); return -5; } } // Удалим из вектора несколько элементов, используя массив индексов. { size_t indexes[5] = {0, 2, 1, 3, 99}; error = 0; // Специализированная функция для удаления объекта типа object не нужна. const size_t d_count = c_vector_erase_few(vector, indexes, 5, NULL, &error); // Если произошла ошибка, покажем ее. if ( (d_count == 0) && (error > 0) ) { printf("erase few error: %Iu\n", error); printf("Program end.\n"); getchar(); return -6; } // Покажем, сколько элементов было удалено. printf("d_count: %Iu\n", d_count); } // Используя функцию обхода, выведем содержимое каждого элемента вектора. { const ptrdiff_t r_code = c_vector_for_each(vector, print_object); // Если произошла ошибка, покажем ее. if (r_code < 0) { printf("for each error, r_code: %Id\n", r_code); printf("Program end.\n"); getchar(); return -7; } } // Удалим из вектора все элементы, f которых > 9. { error = 0; const size_t d_count = c_vector_remove_few(vector, pred_object, NULL, &error); // Если произошла ошибка, покажем ее. if ( (d_count == 0) && (error > 0) ) { printf("remove few error: %Iu\n", error); printf("Program end.\n"); getchar(); return -8; } // Покажем, сколько элементов было удалено. printf("d_count: %Iu\n", d_count); } // Используя функцию обхода, выведем содержимое каждого элемента вектора. { const ptrdiff_t r_code = c_vector_for_each(vector, print_object); // Если произошла ошибка, покажем ее. if (r_code < 0) { printf("for each error, r_code: %Id\n", r_code); printf("Program end.\n"); getchar(); return -9; } } // Удалим вектор. { const ptrdiff_t r_code = c_vector_delete(vector, NULL); // Если возникла ошибка, покажем ее. if (r_code < 0) { printf("delete error, r_code: %Id\n", r_code); printf("Program end.\n"); getchar(); return -10; } } getchar(); return 0; }