Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在C+中填充动态分配的数组+;_C++_Multidimensional Array_Dynamic Memory Allocation - Fatal编程技术网

C++ 在C+中填充动态分配的数组+;

C++ 在C+中填充动态分配的数组+;,c++,multidimensional-array,dynamic-memory-allocation,C++,Multidimensional Array,Dynamic Memory Allocation,我试图使用动态内存分配填充多维数组,遇到了如何确定每个数组大小的问题 大小也是在for循环中动态生成的,不确定如何将这些知识传输到循环构造中,以告诉编译器何时停止 请不要直接回答这个问题,只需要一个方向,这样我就可以找出如何解决确定这个问题的方法, 对于(intv=0;vn; 返回n; } int main() { 向量矩阵; 调整大小(得到一个整数(“向量数:”); 用于(自动和矢量:矩阵) { 调整大小(获取一个整数(“向量大小:”); 用于(自动元素:矢量(&E) 元素=获取一个整数(“元

我试图使用动态内存分配填充多维数组,遇到了如何确定每个数组大小的问题

大小也是在for循环中动态生成的,不确定如何将这些知识传输到循环构造中,以告诉编译器何时停止

请不要直接回答这个问题,只需要一个方向,这样我就可以找出如何解决确定这个问题的方法, 对于(intv=0;v
int**a=新的int*[n];
对于(int i=0;iCUT

而不是使用指针指向<代码> int <代码>,考虑使用一个单独的分配。它更容易和更快!

int * matrix = new int[width * height];

matrix[y * width + x] = 0;

delete [] matrix;

您可以将memset设置为初始化数组

int *arr = new int[5]; 
fill(c, c + 5, 3); //fill(array, array+size, intialvalue)
cout<<c[4];
int*arr=newint[5];
填充(c,c+5,3);//填充(数组,数组+大小,初始值)

cout如果不在变量中实际保存大小,则无法知道或找到动态分配数组的大小。无法使用经典的
sizeof(arr)/sizeof(type)
查找大小,因为sizeof()指针只是它的类型大小,而不是数组的总大小。使用STD::vector或保持跟踪每个动态数组的大小。

< P>我随意将程序改写为一个更具统治性的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';
    }
}
#包括
#包括
#包括
int获取一个整数(std::string消息)
{
std::cout>n;
返回n;
}
int main()
{
向量矩阵;
调整大小(得到一个整数(“向量数:”);
用于(自动和矢量:矩阵)
{
调整大小(获取一个整数(“向量大小:”);
用于(自动元素:矢量(&E)
元素=获取一个整数(“元素值:”);
}
用于(自动v:矩阵)
{
用于(自动e:v)

STD::在你的代码中没有多维数组。指针不是数组,我想你有一个很好的理由不使用<代码> STD::vector < /代码>。是的,向量模板类很简单,但是我希望在C++中能很好地掌握动态内存分配。你不能从指针中确定数组的大小。单独检查更新并不能真正解决问题,因为您仍然无法跟踪每个子阵列的大小,因此使用数据会很困难。您必须在某个地方跟踪大小。如果仔细阅读OP,您会发现JYasir并没有对所有行使用相同的宽度。@AdrianMcCarthy他仍然可以使用single分配;只需分配所需元素的总数,并将索引计算到分配的数组中。Acorn的示例在这里可能不合适,但其思想仍然适用。此外,他本应使用
std::vector
,从而避免了大量的混淆。@AdrianMcCarthy:的确,但学习C/C++的人往往认为ave需要逐个分配行/列--可能是因为他们首先学习了多维数组。这里的伪示例仅显示了一般原理。是的,可以对数组使用单个分配,但随后需要对数组进行单独分配,以跟踪每个子数组的大小或偏移量。下面给出一个答案AdrianMcCarthy:不一定——它们可能在编译时仍然是已知的;在这种情况下,您只需要到索引的映射。即使它们不知道,您也可能有其他方法来跟踪它们,比如使用终止符值作为字符串。但是,是的,您可能希望这样做它使用另一个分配;虽然我不确定这是一个什么问题。这与问题完全无关,也是错误的。他只问如何初始化动态创建的数组。这就是为什么我建议他使用memset functionNo,OP问如何用用户提供的值填充它。另外,您的示例代码对Dynamic不起作用我想继续使用动态记忆,但是的,它弊大于利。不过,我非常感谢你的反馈,因为它为如何解决这些面试相关问题提供了另一个视角:-)…如果你在面试时,他们要求你做手动记忆管理,问他们这是否是一个技巧我不知道你为什么会被否决。这是正确的答案。这个问题实际上并不涉及二维数组,而是一个指向动态分配的数组的指针数组,这些数组的大小不同,但没有保存。
int * matrix = new int[width * height];

matrix[y * width + x] = 0;

delete [] matrix;
int *arr = new int[5]; 
fill(c, c + 5, 3); //fill(array, array+size, intialvalue)
cout<<c[4];
#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';
    }
}