我需要动态分配其大小在运行时给出的1-D和2-D数组.
我设法"发现" std::vector,我认为这符合我的目的,但我想问一下我写的是否正确和/或可以改进.
这就是我正在做的事情:
#include <vector>
typedef std::vector< std::vector<double> > matrix;
//... various code and other stuff
std::vector<double> *name = new std::vector<double> (size);
matrix *name2 = new matrix(sizeX, std::vector<double>(sizeY));
Run Code Online (Sandbox Code Playgroud)
Lig*_*ica 52
正如您所发现的那样,在运行时给出维度时,需要动态分配数组.
但是,std::vector已经是这个过程的包装器,所以动态分配向量就像一个双重正面.这是多余的.
写吧:
#include <vector>
typedef std::vector< std::vector<double> > matrix;
matrix name(sizeX, std::vector<double>(sizeY));
Run Code Online (Sandbox Code Playgroud)
您将两个问题混为一谈,即动态分配和可调整大小的容器.你不需要担心动态分配,因为你的容器已经为你做了,所以就像这样说:
matrix name(sizeX, std::vector<double>(sizeY));
Run Code Online (Sandbox Code Playgroud)
这将使name对象具有自动存储持续时间,您可以通过它访问其成员name[i][j].
您所做的基本上应该可以,但是:
通常,不要动态分配对象
如果要向量,请执行以下操作:
std::vector<double> vec(size);
Run Code Online (Sandbox Code Playgroud)
不是这个:
std::vector<double>* vec = new std::vector<double>(size);
Run Code Online (Sandbox Code Playgroud)
后者为您提供了一个指针,您必须将其删除。前者为您提供了一个向量,当它超出范围时,将自动清除。(当然,在内部它是动态分配对象的,但是诀窍是这是由类本身处理的,您不必在用户代码中担心它)。