Guest User

Untitled

a guest
Aug 18th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. What's the best c implementation of the C vector?
  2. int *create_vector(size_t n) {
  3. return malloc(n * sizeof(int));
  4. }
  5.  
  6. void delete_vector(int *v) {
  7. free(v);
  8. }
  9.  
  10. int *resize_vector(int *v, size_t n) {
  11. return realloc(v, n * sizeof(int));
  12. /* returns NULL on failure here */
  13. }
  14.  
  15. typedef struct {
  16. size_t size;
  17. int *data;
  18. } int_vector;
  19.  
  20. int_vector *create_vector(size_t n) {
  21. int_vector *p = malloc(sizeof(int_vector));
  22. if(p) {
  23. p->data = malloc(n * sizeof(int));
  24. p->size = n;
  25. }
  26. return p;
  27. }
  28.  
  29. void delete_vector(int_vector *v) {
  30. if(v) {
  31. free(v->data);
  32. free(v);
  33. }
  34. }
  35.  
  36. size_t resize_vector(int_vector *v, size_t n) {
  37. if(v) {
  38. int *p = realloc(v->data, n * sizeof(int));
  39. if(p) {
  40. p->data = p;
  41. p->size = n;
  42. }
  43. return v->size;
  44. }
  45. return 0;
  46. }
  47.  
  48. int get_vector(int_vector *v, size_t n) {
  49. if(v && n < v->size) {
  50. return v->data[n];
  51. }
  52. /* return some error value, i'm doing -1 here,
  53. * std::vector would throw an exception if using at()
  54. * or have UB if using [] */
  55. return -1;
  56. }
  57.  
  58. void set_vector(int_vector *v, size_t n, int x) {
  59. if(v) {
  60. if(n >= v->size) {
  61. resize_vector(v, n);
  62. }
  63. v->data[n] = x;
  64. }
  65. }
  66.  
  67. int_vector *v = create_vector(10);
  68. set_vector(v, 0, 123);
  69.  
  70. struct element{
  71. void* item;
  72. element* next;
  73. element* previous;
  74. }
Add Comment
Please, Sign In to add comment