如何动态地为Vector <point>分配内存?</point>

时间:2013-04-17 06:59:56

标签: c++ opencv dll

如何动态地为Vector分配内存?

vector<Point> vInPts; //我的输入向量 - 我已经转储了一些值(大小为6)

//对输入矢量点进行一些计算

vector<Point> vOutPts; //如何为此输出向量点动态分配内存

3 个答案:

答案 0 :(得分:4)

您可能无需动态分配矢量本身。在内部,向量将分配动态存储其元素所需的内存,并负责管理此内存。所以只需在自动存储中声明向量:

 vector<Point> vOutPts;

您可以通过调用std::vector::reserve为该向量分配预定数量的内存。

如果绝对必须动态分配矢量,请确保了解内存管理的所有内容,并阅读smart pointersRAII

答案 1 :(得分:2)

如果您知道所需的大小,则可以使用以下命令分配和初始化足够的元素:

vOutPts.resize(size);

或者您可以使用该尺寸创建它:

vector<Point> vOutPts(size);

否则,您可以一次将向量增加一个元素:

vOutPts.push_back(some_point);

如果您(大致)知道要推送多少元素,那么您可以通过事先分配一些内存来提高效率,而无需初始化任何元素:

vOutPts.reserve(approx_size);

答案 2 :(得分:0)

这样

vector <Point> *myvect= new vector<Point>()

但别忘了打电话:

delete myvect

当你完成使用它,否则你会造成泄漏。

请注意,以这种方式分配矢量本身与分配矢量内容的动态不同。只有当您打算在函数内部创建向量并通过引用返回时,才应该对向量本身进行动态分配。自动内存管理更容易处理,更不容易出错,最重要的是比动态分配对象更安全...因此,无论何时您不需要,都应该避免这种动态分配