【发布时间】:2019-03-15 02:26:06
【问题描述】:
如何打印出这个多维向量?我只是无法弄清楚在下面代码的打印部分的内部循环中要放置什么作为条件。我似乎无法弄清楚如何遍历数组来打印成绩。任何帮助将不胜感激。
#include <iostream>
using namespace std;
int main()
{
int course, grades;
int** crsgrd;
// get inputs and asign grades
cout << "Enter number of courses: ";
cin >> course;
crsgrd = new int * [course];
for (int c = 0; c < course; c++) {
cout << "Enter number of grades: ";
cin >> grades;
crsgrd[c] = new int[grades];
for(int g = 0; g < grades; g++) {
cout << "Enter your grade: ";
cin >> crsgrd[c][g];
}
}
// print grade report
for(int c = 0; c < course; c++) {
for(int g = 0; g <= ?????????; g++)
cout << crsgrd[c][g] << " ";
cout << endl;
}
// free the array
for(int i = 0; i < course; i++)
delete [] crsgrd[i];
delete [] crsgrd;
return 0;
}
【问题讨论】:
-
g < grades??? -
顺便说一句,这是 C++,应该使用
std::vector,这样他们就不必担心所有这些内存管理。 -
看来是你造成了问题:
cin >> grades; crsgrd[c] = new int[grades];。您邀请用户为每门课程给出不同数量的成绩,但您不存储成绩数量。有几种方法可以解决这个问题: 1. 您可以将等级数存储为每个向量中的第一个元素。 2. 你可以使用 std::vector<:vector>> courseGrades。你也可以想出其他方法。 -
改进了@JohnMurray 对
std::vector的std::vectors 的建议:单个std::vectorwrapped in a class 使其看起来像2D。这样可以将所有数据紧密结合在一起,当您这样做时,现代 CPU 喜欢它。它使预加载缓存变得非常容易。 -
@user4581301 假设第一门课程有 5 个成绩,第二门课程有 10 个成绩。您会创建一个 Matrix::reserve(size_t rows, size_t cols) 函数来为较长的行分配额外的空间,其中cols = max(到目前为止所有行的长度)?我同意将数据保存在一起比单独分配行更好,这会造成缓存噩梦。