How to replicate vector in c?

后端 未结 6 1072
一生所求
一生所求 2020-11-29 19:48

In the days before c++ and vector/lists, how did they expand the size of arrays when they needed to store more data?

6条回答
  •  心在旅途
    2020-11-29 20:39

    You can see implementation vc_vector:

    struct vc_vector {
      size_t count;
      size_t element_size;
      size_t reserved_size;
      char* data;
      vc_vector_deleter* deleter;
    };
    
    ...
    
    vc_vector* vc_vector_create_copy(const vc_vector* vector) {
      vc_vector* new_vector = vc_vector_create(vector->reserved_size / vector->count,
                                               vector->element_size,
                                               vector->deleter);
      if (unlikely(!new_vector)) {
        return new_vector;
      }
    
      if (memcpy(vector->data,
                 new_vector->data,
                 new_vector->element_size * vector->count) == NULL) {
        vc_vector_release(new_vector);
        new_vector = NULL;
        return new_vector;
      }
    
      new_vector->count = vector->count;
      return new_vector;
    }
    

    To use it:

    vc_vector* v1 = vc_vector_create(0, sizeof(int), NULL);
    for (int i = 0; i < 10; ++i) {
      vc_vector_push_back(v1, &i);
    }
    
    // v1 = 0 1 2 3 4 5 6 7 8 9
    
    vc_vector* v2 = vc_vector_create_copy(v1);
    
    // v2 = 0 1 2 3 4 5 6 7 8 9 (copy of v1)
    
    // to get pointer to int:
    
    const int* v2_data = vc_vector_data(v1);
    

提交回复
热议问题