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

C++: How to allocate and fill dynamic array of a struct passed by reference?

我有一个非常简单的结构来将 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 的第一个返回值并且永远不会改变,停留在一个元素 - 第一个返回值。

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

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

When printed, the array appears to be filled with random ASCII characters

这是因为你的array_join函数有错误:

text += array.array[i];

这将附加一个 int 重新解释为 char 而不是 数字的十进制表示形式。

使用std::to_string解决问题:

text += std::to_string(array.array[i]);

如果您只能使用 C++11 之前的 C++ 版本,请改用 std::stringstream