我有一个非常简单的结构,用于将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字符,并且第一个元素从来都不是(即使调试器显示它只有一个)。
这是什么原因以及如何避免此问题?
答案 0 :(得分:4)
打印时,数组似乎填充有随机ASCII字符
这是因为您的array_join
函数存在错误:
text += array.array[i];
这将附加一个重新解释为int
的{{1}},不是数字的十进制表示形式。
使用std::to_string
来解决问题:
char
如果受限于C ++ 11之前的C ++版本,请改用std::stringstream
。