我正在尝试使用动态内存分配来填充多维数组,并遇到如何确定每个数组大小的问题。
大小也是在for循环中动态生成的,不知道如何将这些知识传递到循环结构中,告诉编译器何时停止。
请不要直接回答问题,只需要一个方向,这样我就可以弄清楚如何解决这个问题, for(int v = 0; v< sizeof(a [y]); v ++)
int** a = new int*[n];
for (int i = 0; i < n; i++) {
int colcount;
cout << "Enter Size of Array for " << i << " : ";
cin >> colcount;
a[i] = new int[colcount];
}
// How to fill the matrix now
for (int y = 0; y < n; y++) {
for (int v = 0; v < sizeof(a[y]); v++) {
cout << "Enter Array Content [" << y << "][" << v << "] :";
cin >> a[y][v];
}
}
更新 通过将for循环放入其中来实现它。
int** a = new int*[n];
for (int i = 0; i < n; i++) {
int colcount;
cout << "Enter Size of Array for " << i << " : ";
cin >> colcount;
a[i] = new int[colcount];
for (int v = 0; v < colcount; v++) {
cout << "Enter Array Content [" << i << "][" << v << "] :";
cin >> a[i][v];
}
}
上次更新: 为了更好地跟踪模板类的内容和特权,我最终使用向量并在社区的帮助下,这就是我的出现方式。
int n;
cout << "Enter Num of Vectors: ";
cin >> n;
vector<vector <int> > mult_arr(n);
for (int i = 0; i < n; i++) {
int k;
cout << "Enter size for vec " << i << ":";
cin >> k;
mult_arr[i].resize(k);
for (int x = 0; x < k; x++) {
cout << "Enter Array Contents [" << i << "][" << x << "] :";
cin >> mult_arr[i][x];
}
}
答案 0 :(得分:1)
如果没有实际保存变量中的大小,则无法知道或找到动态分配数组的大小。您不能使用经典sizeof(arr)/sizeof(type)
来查找大小,因为sizeof()指针只是它的类型大小而不是总数组大小。使用std :: vector或继续跟踪每个动态数组的大小。
答案 1 :(得分:0)
请考虑使用单个分配,而不是使用指向int
的指针。它更容易,更快!
int * matrix = new int[width * height];
matrix[y * width + x] = 0;
delete [] matrix;
答案 2 :(得分:0)
我冒昧地将你的程序重写为更多的domatic C ++程序(包括一个main函数,所以你可以测试它)。从技术上讲,这确实解决了同样的问题,但它不使用new
和delete
,而是使用std::vector
,这应该是您应该首先达到的目标。
除非你有非常非常的理由不使用vector,否则我建议你忘记new
/ delete
。知道它在那里并继续你的生活。
我意识到这并没有真正回答你的问题。我认为评论的时间太长,所以我将其作为答案提供。
#include <iostream>
#include <vector>
#include <string>
int get_an_integer(std::string message)
{
std::cout << message;
int n;
std::cin >> n;
return n;
}
int main()
{
std::vector<std::vector<int>> matrix;
matrix.resize(get_an_integer("Number of vectors:"));
for (auto& vector : matrix)
{
vector.resize(get_an_integer("Vector size:"));
for (auto& element : vector)
element = get_an_integer("Element value:");
}
for (auto v : matrix)
{
for (auto e : v)
std::cout << e << " ";
std::cout << '\n';
}
}
请注意我不必跟踪任何事情,而且我并不真正关心任何事物的明确大小。即使是元素的价值也不是很有趣。
我希望这会对你有所帮助。如果您有任何疑问,请询问。
答案 3 :(得分:-1)
你可以memset来初始化一个数组。喜欢
int *arr = new int[5];
fill(c, c + 5, 3); //fill(array, array+size, intialvalue)
cout<<c[4];
我希望这会对你有所帮助。