加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c给定内存的向量构造

发布时间:2020-12-16 03:39:14 所属栏目:百科 来源:网络整理
导读:我想使用std :: vector来控制给定的内存.首先,我很确定这不是一个好习惯,但好奇心对我来说更好,我想知道如何做到这一点. 我遇到的问题是这样的方法: vectorfloat getRow(unsigned long rowIndex){ float* row = _m-getRow(rowIndex); // row is now a piece
我想使用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]是一个浮点*,并且保证向量可以连续存储项目.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读