我曾尝试在C++中定义一个变量的数组大小,虽然我没有完全理解动态内存的概念,但我使它工作。但是,在这种情况下,我不知道如何对数组“点”做同样的事情。定义一个结构中的变量的数组大小
num=50;
struct pos
{
double x;
};
struct pos point[num];
有没有什么明显的我可以忽略?
我曾尝试在C++中定义一个变量的数组大小,虽然我没有完全理解动态内存的概念,但我使它工作。但是,在这种情况下,我不知道如何对数组“点”做同样的事情。定义一个结构中的变量的数组大小
num=50;
struct pos
{
double x;
};
struct pos point[num];
有没有什么明显的我可以忽略?
这些类型的数组大小必须是编译时间常量,因此编译器知道需要预留多少内存。
int count = 50;
int arr[count] // error!
static const int count = 50;
int arr[count]; // OK!
另一个选项是动态分配的内存,其中大小在运行时已知。
int count = 50;
int* arr = new int[count];
delete [] arr;
一般来讲,你不希望是处理你自己的原始指针和内存分配,而应更喜欢:
#include <vector>
int count = 50;
std::vector<int> arr(count);
这也将为您有任何自定义类型工作只要它们能够复制(提示:你的例子pos
结构是可复制):
#include <vector>
int count = 50;
std::vector<pos> arr(count);
arr[0].x = 1;
// ... etc
arr[49].x = 49;
std::vector
具有丰富的接口,并且所有的细节can be found here
另一种选择,如果不想'vector'的功能,就是使用'unique_ptr
是的,我很高兴'unique_ptr'解决了'auto_ptr'没有正确处理数组的问题。 – Chad
数组在标准C++中不能有动态大小。 – Pubby
*有什么明显的我可以忽略吗?*'std :: vector' – chris