C ++:如何分配和填充通过引用传递的结构的动态数组?

时间:2018-09-26 15:42:47

标签: c++ arrays pointers pass-by-reference dynamic-memory-allocation

我有一个非常简单的结构,用于将size字段添加到动态数组:

template <typename T>
struct sized_array {
    int size;
    T* array;
};

我不能使用std::vectorstd::array。填充数组的函数将初始化sized_array.array字段,并使用随机整数填充它:

void array_fill(sized_array<int> &array, int size = ARRAY_SIZE) {
    array.array = new int[size];
    array.size  = size;
    for (int i = 0; i < size; i++) {
        array.array[i] = random_in_range(RANDOM_MIN, RANDOM_MAX);
    }
}

其他功能array_joinarray_print打印数组的内容:

string array_join(sized_array<int> &array, string delimiter) {
    string text = "";

    for (int i = 0; i < array.size; i++) {
        text += array.array[i];
        if (i < array.size) text += delimiter;
    }

    return text;
}

void array_print(sized_array<int> &array) {
    cout << "array(" << array.size << ") = [";
    cout << array_join(array, ", ") << "]" << endl;
}

像这样声明数组变量,然后程序运行以下代码:

sized_array<int> number_array;

int main() {
    srand(time(NULL));

    array_fill(number_array);
    array_print(number_array);

    system("pause");
    return 0;
}

调试时,数组在首次初始化时显示此值,然后似乎采用第一个返回的值random_in_range且永不改变,而是停留在一个元素上-第一个返回的值。

enter image description here

打印时,数组似乎填充有随机的ASCII字符,并且第一个元素从来都不是(即使调试器显示它只有一个)。

这是什么原因以及如何避免此问题?

1 个答案:

答案 0 :(得分:4)

  

打印时,数组似乎填充有随机ASCII字符

这是因为您的array_join函数存在错误:

text += array.array[i];

这将附加一个重新解释为int的{​​{1}},不是数字的十进制表示形式。

使用std::to_string来解决问题:

char

如果受限于C ++ 11之前的C ++版本,请改用std::stringstream