fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define RES 5
  5.  
  6. struct A {
  7. int x;
  8. int y;
  9. };
  10.  
  11. struct vector_a {
  12. struct A* tab;
  13. size_t len;
  14. size_t cap;
  15. };
  16.  
  17. void init(struct vector_a*);
  18. void resize(struct vector_a*);
  19. void add(struct vector_a*, struct A);
  20. void display(struct vector_a*);
  21. void clean(struct vector_a*);
  22.  
  23. int main()
  24. {
  25.  
  26. struct vector_a v;
  27. struct A a[3] = {{10, 12}, {11, 3}, {8, 9}};
  28. int i;
  29. init(&v);
  30. for(i = 0; i < 3; ++i) {
  31. add(&v, a[i]);
  32. }
  33. display(&v);
  34. clean(&v);
  35. printf("\n\n");
  36. add(&v, a[1]);
  37. display(&v);
  38. clean(&v);
  39. return 0;
  40. }
  41.  
  42. void init(struct vector_a* v) {
  43. v->tab = NULL;
  44. v->len = 0;
  45. v->cap = 0;
  46. resize(v);
  47. }
  48.  
  49. void resize(struct vector_a* v) {
  50. if(!v->tab) {
  51. v->tab = (struct A*)malloc(RES*sizeof(struct A));
  52. v->cap = RES;
  53. } else {
  54. v->tab = (struct A*)realloc(v->tab, (RES+v->cap)*sizeof(struct A));
  55. v->cap += RES;
  56. }
  57. }
  58.  
  59. void add(struct vector_a* v, struct A a) {
  60. if(!(v->cap-v->len)) {
  61. resize(v);
  62. }
  63. v->tab[v->len++] = a;
  64. }
  65.  
  66. void display(struct vector_a* v) {
  67. int i;
  68. for(i = 0; i < v->len; ++i) {
  69. printf("%d\t%d\n", v->tab[i].x, v->tab[i].y);
  70. }
  71. }
  72.  
  73. void clean(struct vector_a* v) {
  74. free(v->tab);
  75. memset(v, 0, sizeof(struct vector_a));
  76. }
Success #stdin #stdout 0s 1920KB
stdin
Standard input is empty
stdout
10	12
11	3
8	9


11	3