2012-11-26 62 views
0

我曾尝试在C++中定义一个变量的数组大小,虽然我没有完全理解动态内存的概念,但我使它工作。但是,在这种情况下,我不知道如何对数组“点”做同样的事情。定义一个结构中的变量的数组大小

num=50; 
struct pos 
{ 
double x; 
}; 

struct pos point[num]; 

有没有什么明显的我可以忽略?

+2

数组在标准C++中不能有动态大小。 – Pubby

+2

*有什么明显的我可以忽略吗?*'std :: vector' – chris

回答

4

这些类型的数组大小必须是编译时间常量,因此编译器知道需要预留多少内存。

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

+0

另一种选择,如果不想'vector'的功能,就是使用'unique_ptr arr(new int [count];)'' – Praetorian

+0

是的,我很高兴'unique_ptr'解决了'auto_ptr'没有正确处理数组的问题。 – Chad

相关问题