1

假设我有一个这样的向量

std::vector<float*> vec;

现在我知道我需要删除向量内的指针来回收内存。我知道的方法是遍历向量并删除每个指针。我想知道是否有更快的方法来实现这一点。

我有以下情况

std::vector<float*> cont;

for(int i=0; i < SelectedColumns.size();i++)
{
    if(someList.count()>0)
    {
        float *a = new float(  column_cell_mapper[SelectedColumns[i]]->text().toFloat());
        cont.push_back(a);
        someclass.somemethod(*a) // Requires a reference
        ....
        ....
    }       
}
someclass.process();
4

2 回答 2

3

使用std::unique_ptr. 当您的向量超出范围时,每个向量都float将被破坏,无需您进行额外的工作。

std::vector<std::unique_ptr<float>> vec

如果您真的只想要一个用于 数组的容器float,请参阅Mark B 的答案std::vector<std::vector<float>>改用。

于 2013-09-19T15:08:34.680 回答
3

编辑:

您可以将函数调用与插入向量的顺序颠倒过来吗?例如,您可以这样做吗?

    float a = column_cell_mapper[SelectedColumns[i]]->text().toFloat();
    someclass.somemethod(a) // Requires a reference
    cont.push_back(a);

原答案:

只是不要通过指针存储浮点数并使用std::vector<float>。对于像 float 这样的小型简单类型,使用额外的间接级别不会给您带来任何好处。如果您真的真的需要通过指针存储单个浮点数,您可以使用std::unique_ptrC++11 或boost::shared_ptr以前的 C++ 版本。

现在,如果你float*指向一个浮点数,仍然不要那样做。而是使用向量的向量:

std::vector<std::vector<float> > vec;

这仍然会自动为您清理内存,并使您能够专注于编写正确的算法,而不是花费大量时间确保清理内存管理。

于 2013-09-19T15:14:04.190 回答