-1

有没有办法在不使用数组指针的情况下动态初始化数组大小?

除对象数组外的任何数据类型数组。

usingconst关键字实际上不起作用,因为它必须通过代码而不是由用户/客户端初始化为某个值。

代码:

void input() {
   int size; 
   cout<<"Enter the value of Array size\t"; 
   cin>>size; 
   float *ad = new float[size]; 
   float *inad = new float[size]; 
   float *e = new float[size];
}
4

3 回答 3

2

最好的方法是std::vector

// For an array of int
std::vector<int> array( size );

您可以动态添加元素:

array.push_back( 1 ); // 1 is an example

自定义对象也是如此:

class MyObject {};

std::vector<MyObject> array( number_of_object );

如果您需要一些文档:http ://www.cplusplus.com/reference/vector/vector/


正如标准§ 8.3.4中所说,数组只能使用常量表达式来调整大小:

[...]

数组声明的形式为:D1 [常量表达式] 属性说明符序列

如果常量表达式存在,它应该是一个整数常量表达式并且它的值应该大于零。

于 2013-07-23T08:51:43.627 回答
0

C++ 标准仅允许使用常量表达式调整数组的大小(但是,某些编译器可能将其作为非标准语言扩展提供)

您可以使用 std::vector 代替:-

std::vector<int> array(arr_size);

或者您可以手动动态分配内存:-

int *const array = new int[arr_size];

...

delete [] array;  // Remember to delete when you're done

PS:你不想使用指针吗?和他们在一起很容易。

于 2013-07-23T08:28:03.150 回答
0

这个问题在语法上并不明确,但我认为您要求的是,没有指针可以创建动态容器。给定标签,你想使用 C++。

因此

class Foo { 
// Default copy and move constructor created by compiler to allow fast copy by value
};

std::vector<Foo> my_dynamic_array;

如果你想保留一些空间

my_dynamic_array.reserve(50);

如果要按值向其中添加项目,则没有指针

Foo aFoo;
my_dynamic_array.push_back(aFoo);
于 2013-07-23T08:50:56.333 回答