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::vector
或 std::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_join
和 array_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
。
我有一个非常简单的结构来将 size
字段添加到动态数组:
template <typename T>
struct sized_array {
int size;
T* array;
};
我无法使用 std::vector
或 std::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_join
和 array_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
。