Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.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++ 如何创建动态整数数组 < < /Cord>关键字> < /P> < P>动态分配内存,使用新< /代码>:< /P> int* array = new int[SIZE]; 请不要忘记删除< /代码>您分配的每一个数组与新< /代码> .< /p>_C++ - Fatal编程技术网

C++ 如何创建动态整数数组 < < /Cord>关键字> < /P> < P>动态分配内存,使用新< /代码>:< /P> int* array = new int[SIZE]; 请不要忘记删除< /代码>您分配的每一个数组与新< /代码> .< /p>

C++ 如何创建动态整数数组 < < /Cord>关键字> < /P> < P>动态分配内存,使用新< /代码>:< /P> int* array = new int[SIZE]; 请不要忘记删除< /代码>您分配的每一个数组与新< /代码> .< /p>,c++,C++,您可能需要考虑使用标准模板库。它简单易用,而且您不必担心内存分配 int* array = new int[size]; int size=5;//声明向量的大小 向量myvector(大小,0);//创建一个向量来保存“size”int //全部初始化为零 myvector[0]=1234;//赋值像C++数组 自C++11以来,有一种安全的替代方法可以替代new[]和delete[],这与std::vector不同,是零开销的: std::unique_ptr<int[]>

您可能需要考虑使用标准模板库。它简单易用,而且您不必担心内存分配

int* array = new int[size];

int size=5;//声明向量的大小
向量myvector(大小,0);//创建一个向量来保存“size”int
//全部初始化为零
myvector[0]=1234;//赋值像C++数组

自C++11以来,有一种安全的替代方法可以替代
new[]
delete[]
,这与
std::vector
不同,是零开销的:

std::unique_ptr<int[]> array(new int[size]);
std::unique_ptr数组(新的int[size]);
在C++14中:

auto array = std::make_unique<int[]>(size);
auto-array=std::使_唯一(大小);

以上两种方法都依赖于相同的头文件,
#include

只要问题是关于动态数组,您可能不仅希望创建具有可变大小的数组,还希望在运行时更改其大小。下面是一个使用
memcpy
的示例,您也可以使用
memcpy\u
std::copy
。根据编译器的不同,可能需要
。使用此函数时,您可以分配新的内存区域,将原始内存区域的值复制到该区域,然后释放它们

//    create desired array dynamically
size_t length;
length = 100; //for example
int *array = new int[length];

//   now let's change is's size - e.g. add 50 new elements
size_t added = 50;
int *added_array = new int[added];

/*   
somehow set values to given arrays
*/ 

//    add elements to array
int* temp = new int[length + added];
memcpy(temp, array, length * sizeof(int));
memcpy(temp + length, added_array, added * sizeof(int));
delete[] array;
array = temp;
您可以使用常量4而不是
sizeof(int)

\include
#包括
#包括
使用名称空间std;
int main()
{
浮动arr[2095879];
长k,我;
char-ch[100];
k=0;
做{
cin>>ch;
arr[k]=atof(ch);
k++;
}而(ch[0]=='0');


您可能缺少冒号,或者没有用实际大小替换大小。为什么要有分号?这不是一个完整的语句。可能会有更多的声明。如果包含在完整的程序中,这就是OP所要求的。@Ed,问题中的限制似乎是任意的。
std::vector
带有appr的适当的构造函数工作得非常好,应该作为一种替代方法指出。有时人们问的问题不好,这可能算是其中的一种情况——它非常简单,没有给出选择
new
@Ed的任何理由:没有理由使用
new[]<代码> >而不是<代码> STD::vector < /COD> .@ BASH:在C++中,没有任何理由。如果你决定,不管什么原因,“删除标准库”我的评论是C++语言,不是我们在设备上使用的C++语言。即使如此,你也不需要手动地去写代码>删除< /代码>。也就是,代码> STD::vector < /C++ >是动态数组,不与链表无关。它只是一个内存块的包装器。@不。仍然使用<代码>新< /COD>和 Dele> <代码>来实现包装。重点是,你不管理资源并使用它,你可以做一个或另一个。@蒙迪迪耶:让我们从声明开始:在C++中,所有的代码< <新】的实例[]
可以替换为
std::vector
,因为
std::vector
正确地将资源管理与资源使用(SBRM)分开,我们应该这样做。您使用一个
std::vector
。以及。初始化后如何分配和访问它的数据?请看这篇文章,这里详细介绍了每种数据类型:*p-new-10-%E2%80%9D;:~:text=The%20statement%20defined%20and%20initializes,of%20an%20array%20of%20integers。&text=this%20statement%20will%20dynamiccally%20分配,整数%20来自%20%20堆…它正好回答了这个问题。@gmannick因为向量更方便还是因为其他原因?因为我经常遇到需要使用数组而不是向量的第三方函数。@Lèsemajesté这不是不使用向量的理由-std::vector::data()
成员函数将在需要时返回底层原始数组。@zenith:通常,您会使用
运算符&
而不是
数据()
从向量中获取指针,但向量确实提供了与期望数组的函数兼容所需的连续性保证。8年后,该评论可能会让初学者@GManNickG感到困惑,删除它怎么样(因为我认为它是在Jason Iverson实际删除数组之前做出的)?@gsamaras:我同意这很令人困惑,但它仍然是正确的:你的代码不应该手动删除,你必须记住不要忘记。也就是说,使用了智能指针和其他容器。@gmannick我认为你的评论可以不那么教条。代码是正确的,即使它不理想。智能指针和容器几乎总是更好的er选项(特别是在这样的初学者问题中),但不是“总是”我同意斯宾塞的观点,代码没有错,它是简单的,完美的C++。你可以在下面有一个替代方案,称它为最佳实践等等。但是这个例子本身没有什么错误。我不知道它是否只是我,但是C++ 11语法看起来很糟糕。C++ 14看起来更好。然后,我从上次C++ 11起就没有跟上。白令所有这些新表达式都很难,这与动态数组的问题无关。
auto array = std::make_unique<int[]>(size);
//    create desired array dynamically
size_t length;
length = 100; //for example
int *array = new int[length];

//   now let's change is's size - e.g. add 50 new elements
size_t added = 50;
int *added_array = new int[added];

/*   
somehow set values to given arrays
*/ 

//    add elements to array
int* temp = new int[length + added];
memcpy(temp, array, length * sizeof(int));
memcpy(temp + length, added_array, added * sizeof(int));
delete[] array;
array = temp;
#include <stdio.h>
#include <cstring>
#include <iostream>

using namespace std;

int main()
{

    float arr[2095879];
    long k,i;
    char ch[100];
    k=0;

    do{
        cin>>ch;
        arr[k]=atof(ch);
        k++;
     }while(ch[0]=='0');

    cout<<"Array output"<<endl;
    for(i=0;i<k;i++){
        cout<<arr[i]<<endl;
    }

    return 0;
}