将float*转换为vector<float>

3

我有一个函数float * pointwise_search(vector<float > &P,vector<float > &Q,float* n, int len )

我希望在matlab中调用它,所以我需要编写一个mexFunction。

void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) 
{ 
    if (nrhs != 4)
    {
        mexErrMsgTxt("Input is wrong!");
    }

    float *n = (float*) mxGetData(prhs[2]);
    int len = (int) mxGetScalar(prhs[3]);
    vector<float > Numbers= (vector<float >)mxGetPr(prhs[0]);
    vector<float > Q= (vector<float >)mxGetPr(prhs[1]);

    plhs[1] = pointwise_search(Numbers,Q,n,len );

  }

但是我发现vector<float > Numbers= (vector<float >)mxGetPr(prhs[0]); vector<float > Q= (vector<float >)mxGetPr(prhs[1]);是错误的。

因此,我不得不将float * pointwise_search(vector<float > &P,vector<float > &Q,float* n, int len )更改为float * pointwise_search(float *P,float *Q,float* n, int len )

根据答案,我重新编写如下:

 float * pointwise_search(float p,float *q,int num_thres, float n, int len ) 
{    vector<float> P{p, p + num_thres}; 
     vector<float> Q{q, q + num_thres}; 
     int size_of_threshold = P.size();
...
} 

但是出现了错误。

pointwise_search.cpp(12) : error C2601: 'P' : 本地函数定义是不合法的 pointwise_search.cpp(11): 这一行包含了一个尚未匹配的 '{'

根据注释,我应该将 vector<float> P{p, p + num_thres}; 更改为 vector<float> P(p, p + num_thres);。:)


使用向量的迭代器对构造函数,通过数据的开始和结束指针。 - chris
2个回答

8

当然,你通常不能将指针转换为vector,它们是不同的东西。但是,如果指针保存的是已知长度的C风格数组的第一个元素的地址,你可以创建一个与数组内容相同的vector,例如:

std::vector<float> my_vector {arr, arr + arr_length};

其中arr是指针,arr_length是数组的长度。然后,您可以将vector传递给期望std::vector<float>&的函数。


你好。我修改了以下代码:float * pointwise_search(float *p,float q,int num_thres, float n, int len ) { vector<float> P{p, p + num_thres}; vector<float> Q{q, q + num_thres}; int size_of_threshold = P.size();... }但是出现了错误。 - Vivian
2
你是否使用C++11模式编译,例如对于clang和gcc来说是-std=c++11?要么这样做(你应该这样做),要么将{}更改为(). - Baum mit Augen

2
如果您查看例如这个std::vector构造函数参考文献,您将看到一个接受两个迭代器的构造函数(在链接的参考文献中为替代4)。可以使用此构造函数从另一个容器(包括数组)构造向量。
例如:
float* pf = new float[SOME_SIZE];
// Initialize the newly allocated memory

std::vector<float> vf{pf, pf + SOME_SIZE};

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接