在C 中动态分配的数组填充
Filling Dynamically Allocated Array in C++
我正在尝试使用动态内存分配填充多维数组,并陷入如何确定每个数组大小的问题。
尺寸也是在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];
}
}
您无法知道或找到动态分配的数组的大小,而无需实际将大小保持在变量中。您无法使用经典的sizeof(arr)/sizeof(type)
来找到大小,因为指针只是其类型大小,而不是总数组大小。使用std ::向量或继续跟踪每个动态数组的大小。
,而不是使用指针以指示int
,而是考虑使用单个分配。它更容易,更快!
int * matrix = new int[width * height];
matrix[y * width + x] = 0;
delete [] matrix;
我借此自由将您的程序重写为更含糊的C 程序(包括主要功能,因此您可以对其进行测试(。从技术上讲,这确实解决了相同的问题,但是它不使用new
和delete
,而是使用std::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';
}
}
注意我不必跟踪任何东西,我并不真正在乎任何东西的明确尺寸。即使是元素的值也不有趣。
我希望这对您有帮助。如果您有任何疑问,请询问。
您可以记录以初始化数组。喜欢
int *arr = new int[5];
fill(c, c + 5, 3); //fill(array, array+size, intialvalue)
cout<<c[4];
我希望这对您有帮助。
相关文章:
- 在c++中用vector填充一个简单的动态数组
- 如何使用用户输入在C++中正确填充2D数组
- 如何找到大小'x'数组是否完全填充,在C++?
- 如何正确填充在堆上分配的二维数组?
- 如何将零填充的多维数组传递给 C++ 中的函数?
- C++ 填充数组时遇到问题
- 数组填充了不正确的值
- 使用初始化列表填充C++中的多维结构数组时出现问题
- 用数据填充未指定大小的数组
- C++填充多维标准::数组
- 如何在 c++ 上将一定大小的数组填充到另一个更大大小的数组中?
- 有没有办法使用数组填充向量?
- 如何使用 PPM 格式的 uchar* 数组填充 QPixmap
- 在C 中动态分配的数组填充
- 使用数组填充对称矩阵
- C++中的{0}数组填充赋值
- 如何在OpenCV中用OpenNi的deepPixel数组填充矩阵
- 按行、列或随机从数组填充矩阵时出现错误索引问题
- 如何加快非顺序数组填充
- 将数组填充到最大值(memcpy vs vector)