假设在代码中我希望用户指定一个整数(比如说x),然后在计算机内存中分配那些连续的单元格,在那里我进行某种处理.
我的问题是将这个内存分配为new double[x]或者"更好" vector<double>(x).
我知道这两种方法似乎都运行正常(即编译并运行至少在这个小小的代码中)
int x; int* p;
cout<<"Enter integer x:";cin>>x;
vector<double> v(x);
p=new double[x]
Run Code Online (Sandbox Code Playgroud)
如果您认为答案正在使用new那么是否有可能以某种方式神奇地将分配的内存new转换为向量?因为向量会给我更多的操作数据的能力.
vector由于它提供的许多优点(自动内存管理,边界检查等),最好随时使用.
此外,要让向量保留许多元素供您使用(即在内存中一次分配多个元素而不是在添加元素时最终调整大小),您可以将该数字传递给向量的构造函数:
int x;
cout<<"Enter integer x:";cin>>x;
vector<double> v(x);
Run Code Online (Sandbox Code Playgroud)
或者,如果您已经创建了矢量,请使用vector::resize:
// created v somewhere up here and we want to reuse it
int x;
cout << "Enter integer x: "; cin >> x;
v.resize(x);
Run Code Online (Sandbox Code Playgroud)
不,没有办法告诉矢量使用你已经分配的内存,除非你使用自定义分配器[R. Martinho Fernandes,评论].