动态分配矢量(或矢量矢量)

Fed*_*ico 19 c++ vector

我需要动态分配其大小在运行时给出的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)


Ker*_* SB 9

您将两个问题混为一谈,即动态分配和可调整大小的容器.你不需要担心动态分配,因为你的容器已经为你做了,所以就像这样说:

matrix name(sizeX, std::vector<double>(sizeY));
Run Code Online (Sandbox Code Playgroud)

这将使name对象具有自动存储持续时间,您可以通过它访问其成员name[i][j].


jal*_*alf 5

您所做的基本上应该可以,但是

通常,不要动态分配对象

如果要向量,请执行以下操作:

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)

后者为您提供了一个指针,您必须将其删除。前者为您提供了一个向量,当它超出范围时,将自动清除。(当然,在内部它是动态分配对象的,但是诀窍是这是由类本身处理的,您不必在用户代码中担心它)。