在使用 Armadillo C++ 声明后使用辅助内存创建 vec
Creating vec with auxiliary memory after declaration with Armadillo c++
我正在使用 C++ 中的犰狳矩阵库,我想创建一个使用 "auxiliare memory" 的 vec。执行此操作的标准方法是
vec qq(6); qq<<1<<2<<3<<4<<5<<6;
double *qqd = qq.memptr();
vec b1(qqd, 6, false);
所以在这里,如果我改变了b1中的元素,那么qq中的元素也改变了,这就是我想要的。但是,在我的程序中,我全局声明了 b1
向量,因此当我定义它时,我无法调用使 b1
使用 "auxiliare memory" 的构造函数。犰狳中是否有一个功能可以满足我的要求?为什么我 运行 下面的代码会得到不同的结果?
vec b1= vec(qq.memptr(), 3, false); //changing b1 element changes one of qq's element
vec b1;
b1= vec(qq.memptr(), 3, false); //changing b1 element does not chagne qq's
那么,当一个向量被声明为全局时,我如何才能让一个向量使用来自另一个向量的内存?
使用全局变量一般是bad idea.
但是,如果您坚持使用它们,这里有一种使用辅助内存和全局 Armadillo 向量的可能方法:
#include <armadillo>
using namespace arma;
vec* x; // global declaration as a pointer; points to garbage by default
int main(int argc, char** argv) {
double data[] = { 1, 2, 3, 4 };
// create vector x and make it use the data array
x = new vec(data, 4, false);
vec& y = (*x); // use y as an "easier to use" alias of x
y.print("y:");
// as x is a pointer pointing to an instance of the vec class,
// we need to delete the memory used by the vec class before exiting
// (this doesn't touch the data array, as it's external to the vector)
delete x;
return 0;
}
我正在使用 C++ 中的犰狳矩阵库,我想创建一个使用 "auxiliare memory" 的 vec。执行此操作的标准方法是
vec qq(6); qq<<1<<2<<3<<4<<5<<6;
double *qqd = qq.memptr();
vec b1(qqd, 6, false);
所以在这里,如果我改变了b1中的元素,那么qq中的元素也改变了,这就是我想要的。但是,在我的程序中,我全局声明了 b1
向量,因此当我定义它时,我无法调用使 b1
使用 "auxiliare memory" 的构造函数。犰狳中是否有一个功能可以满足我的要求?为什么我 运行 下面的代码会得到不同的结果?
vec b1= vec(qq.memptr(), 3, false); //changing b1 element changes one of qq's element
vec b1;
b1= vec(qq.memptr(), 3, false); //changing b1 element does not chagne qq's
那么,当一个向量被声明为全局时,我如何才能让一个向量使用来自另一个向量的内存?
使用全局变量一般是bad idea.
但是,如果您坚持使用它们,这里有一种使用辅助内存和全局 Armadillo 向量的可能方法:
#include <armadillo>
using namespace arma;
vec* x; // global declaration as a pointer; points to garbage by default
int main(int argc, char** argv) {
double data[] = { 1, 2, 3, 4 };
// create vector x and make it use the data array
x = new vec(data, 4, false);
vec& y = (*x); // use y as an "easier to use" alias of x
y.print("y:");
// as x is a pointer pointing to an instance of the vec class,
// we need to delete the memory used by the vec class before exiting
// (this doesn't touch the data array, as it's external to the vector)
delete x;
return 0;
}