vector的实现

实现如下

int VectorCInit(VectorC *vc, size_t per_malloc_size) {
  if (per_malloc_size == 0) {
    return NNACL_ERR;
  }
  vc->data_ = (int *)malloc(per_malloc_size * sizeof(int));
  if (vc->data_ == NULL) {
    return NNACL_ERR;
  }
  vc->size_ = 0;
  vc->max_size_ = per_malloc_size;
  vc->per_malloc_size_ = per_malloc_size;
  return NNACL_OK;
}

int VectorCSet(VectorC *vc, const int *src_shape, size_t src_shape_size) {
  if (src_shape_size == 0) {
    vc->size_ = 0;
  } else {
    free(vc->data_);
    if (vc->per_malloc_size_ == 0) {
      return NNACL_ERR;
    }
    vc->max_size_ = (src_shape_size / vc->per_malloc_size_ + 1) * vc->per_malloc_size_;
    vc->data_ = (int *)malloc(sizeof(int) * vc->max_size_);
    if (vc->data_ == NULL) {
      return NNACL_ERR;
    }
    for (size_t i = 0; i < src_shape_size; i++) {
      vc->data_[i] = src_shape[i];
    }
    vc->size_ = src_shape_size;
  }
  return NNACL_OK;
}

int VectorCPush(VectorC *vc, int value) {
  if (vc->size_ + 1 > vc->max_size_) {
    int *tmp = (int *)malloc(vc->per_malloc_size_ * sizeof(int) + vc->max_size_ * sizeof(int));
    if (tmp == NULL) {
      return NNACL_ERR;
    }
    memcpy(tmp, vc->data_, vc->size_ * sizeof(int));
    free(vc->data_);
    vc->data_ = tmp;
    vc->max_size_ = vc->max_size_ + vc->per_malloc_size_;
  }
  vc->data_[vc->size_] = value;
  vc->size_++;
  return NNACL_OK;
}

int VectorCInsert(VectorC *vc, int index, int value) {
  if (vc->size_ + 1 > vc->max_size_) {
    int *tmp = (int *)malloc(vc->per_malloc_size_ * sizeof(int) + vc->max_size_ * sizeof(int));
    if (tmp == NULL) {
      return NNACL_ERR;
    }
    memcpy(tmp, vc->data_, vc->size_ * sizeof(int));
    free(vc->data_);
    vc->data_ = tmp;
    vc->max_size_ = vc->max_size_ + vc->per_malloc_size_;
  }
  memmove(vc->data_ + index + 1, vc->data_ + index, (size_t)(vc->size_ - index) * sizeof(int));
  vc->data_[index] = value;
  vc->size_++;
  return NNACL_OK;
}

void VectorCErase(VectorC *vc, int index) {
  memmove(vc->data_ + index, vc->data_ + index + 1, (size_t)(vc->size_ - index - 1) * sizeof(int));
  vc->size_--;
}

bool VectorCEqual(const VectorC *vc1, const VectorC *vc2) {
  if (vc1->size_ != vc2->size_) {
    return false;
  }
  for (size_t i = 0; i < vc1->size_; i++) {
    if (vc1->data_[i] != vc2->data_[i]) {
      return false;
    }
  }
  return true;
}

void VectorCFree(VectorC *vc) {
  free(vc->data_);
  vc->data_ = NULL;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

andeyeluguo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值