我正在使用C++ ublas庫編寫Matlab擴展,並且希望能夠通過由Matlab中間人傳遞的C數組初始化我的ublas向量。 如何從C數組中初始化ublas向量(爲求效率)明確複製數據。我找了沿以下幾行代碼的東西:從C數組初始化ublas向量
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++矢量指向
v[0]=0 pv[0]=0
除了*在理論上*你可以創建一個ublas :: vector的子類來做到這一點。你的子類可以像一個const ublas :: vector一樣不可調整大小,或者你必須覆蓋調整容器大小所涉及的所有方法,以確保不會釋放不屬於它的內存。 只有一個完整的受虐狂會嘗試這一點。 – 2009-11-16 17:55:22