【问题标题】:Insert element into struct vector将元素插入结构向量
【发布时间】:2020-05-20 05:32:51
【问题描述】:

我想使用一个函数初始化一个结构并插入它,如下所示。我想动态初始化数组我想声明两个结构向量,一个是动态的,另一个是静态的

【问题讨论】:

  • 如果这是 C++ 为什么是程序函数而不是向vector 添加函数?定义 vector::vector() 而不是这个非标准的 initialize 函数。这也是一个了解析构函数的机会,如果您使用new 分配,这是强制性的。
  • 提示:vec.array[size]; 不分配,它只是执行一个未初始化的指针。
  • 如果您在插入元素时不检查该条件,为什么向量中有一个 max_size?

标签: c++ struct


【解决方案1】:

您的initialize() 函数没有为数组分配任何内存,也没有将current_size 初始化为正确的值。它需要看起来像这样:

void initialize(vector &vec, int size){
    vec.current_size = 0;
    vec.array = new int[size];
    vec.max_size = size;
}

然后你需要一个函数在你使用完数组后释放它,例如:

void finalize(vector &vec){
    delete[] vec.array;
    vec.current_size = 0;
    vec.max_size = 0;
}

此外,您的 insert() 函数应更新以避免一旦数组填满其最大容量时缓冲区溢出:

void insert( vector &vec, int element){
    if (vec.current_size < vec.max_size){
        vec.array[vec.current_size] = element;
        vec.current_size++;
    }
}

如果需要,这也可以让您扩大数组:

void insert( vector &vec, int element){
    if (vec.current_size == vec.max_size){
        int new_max = vec.max_size * 2;
        int *new_array = new int[new_max];
        for(int i = 0; i < vec.current_size; ++i){
            new_array[i] = vec.array[i];
        }
        delete[] vec.array;
        vec.array = new_array;
        vec.max_size = new_max;
    }
    vec.array[vec.current_size] = element;
    vec.current_size++;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2021-08-09
    • 2019-03-08
    • 2010-12-02
    • 2018-10-08
    • 1970-01-01
    • 2013-04-02
    相关资源
    最近更新 更多