gpt4 book ai didi

c++ - 从 C 数组初始化 ublas vector

转载 作者:可可西里 更新时间:2023-11-01 18:42:32 25 4
gpt4 key购买 nike

我正在使用 C++ ublas 库编写 Matlab 扩展,我希望能够从 Matlab interpeter 传递的 C 数组初始化我的 ublas vector 。如何在不(为了提高效率)显式复制数据的情况下从 C 数组初始化 ublas vector 。我正在寻找以下代码行的内容:

using namespace boost::numeric::ublas;

int pv[10] = { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 };
vector<int> v (pv);

一般来说,是否可以从数组初始化 C++ std::vector?像这样:

#include <iostream>
#include <vector>
using namespace std;

int main()
{
int pv[4] = { 4, 4, 4, 4};
vector<int> v (pv, pv+4);

pv[0] = 0;
cout << "v[0]=" << v[0] << " " << "pv[0]=" << pv[0] << endl;

return 0;
}

但是初始化的地方不会复制数据。在这种情况下,输出是

v[0]=4 pv[0]=0

但我希望输出相同,更新 C 数组会更改 C++ vector 指向的数据

v[0]=0 pv[0]=0

最佳答案

我不确定您的问题与 MATLAB/MEX 有什么关系,但附带说明一下,您可能想知道 MATLAB 实现了写时复制策略。

这意味着当你复制一个数组时,实际上只复制了一些标题,而数据本身在两个数组之间共享。一旦其中一个被修改,实际上就制作了一份数据。

以下是对引擎盖下可能发生的事情的模拟(借自此 old post ):

-----------------------------------------
>> a = [35.7 100.2 1.2e7];

mxArray a
pdata -----> 35.7 100.2 1.2e7
crosslink=0

-----------------------------------------
>> b = a;

mxArray a
pdata -----> 35.7 100.2 1.2e7
crosslink / \
| / \ |
| | |
| | |
\ / | |
crosslink |
mxArray b |
pdata --------

-----------------------------------------
>> a(1) = 1;

mxArray a
pdata -----> (1) 100.2 1.2e7
crosslink=0


crosslink=0
mxArray b
pdata ------> 35.7 100.2 1.2e7 ...

我知道这并不能真正回答您的问题,我只是认为您可能会发现这个概念有帮助。

关于c++ - 从 C 数组初始化 ublas vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1735841/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com