c给定内存的向量构造

前端之家收集整理的这篇文章主要介绍了c给定内存的向量构造前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想使用std :: vector来控制给定的内存.首先,我很确定这不是一个好习惯,但好奇心对我来说更好,我想知道如何做到这一点.

我遇到的问题是这样的方法

vector<float> getRow(unsigned long rowIndex)
{
    float* row = _m->getRow(rowIndex); // row is now a piece of memory (of a known size) that I control
    vector<float> returnValue(row,row+_m->cols()); // construct a new vec from this data
    delete [] row; // delete the original memory 
    return returnValue; // return the new vector 
}

_m是一个DLL接口类,它返回一个float数组,调用者负责删除.所以我想将它包装在一个向量中并将其返回给用户….但是这个实现为向量分配新的内存,复制它,然后删除返回的内存,然后返回向量.

我想要做的是直接告诉新的向量它可以完全控制这块内存,所以当它被删除时,内存被清除.

更新:这个的原始动机(从DLL返回的内存)被一些响应者相当牢固地压扁了:)但是,我还是想知道这个问题的答案…有没有办法构建一个std :: vector使用给定的一块预先分配的内存T *数组,以及这个内存的大小?

解决方法

Vector的默认分配器不提供对其内部的这种类型的访问.您可以使用自己的分配器(向量的第二个模板参数)来完成它,但这会改变向量的类型.

如果你可以直接写入向量会更容易:

vector<float> getRow(unsigned long rowIndex) {
  vector<float> row (_m->cols());
  _m->getRow(rowIndex,&row[0]);  // writes _m->cols() values into &row[0]
  return row;
}

请注意,& row [0]是一个浮点*,并且保证向量可以连续存储项目.

猜你在找的C&C++相关文章