如何将自定义特征张量类存储到 std::vector 中?
How to store a custom Eigen Tensor class into std::vector?
我正在尝试创建一个 std::vector (DIIS_Tensors(,其中包含我正在收敛的张量的一些 (DIIS_num_iters( 次迭代。
我初始化了DIIS_Tensors:
std::vector<TensorRank4> DIIS_Tensors(DIIS_num_iters);
其中 TensorRank4 是下面定义的自定义类:
class TensorRank4 {
public:
TensorRank4(size_t dim0, size_t dim1, size_t dim2, size_t dim3) {
dims_[0] = dim0;
dims_[1] = dim1;
dims_[2] = dim2;
dims_[3] = dim3;
data_.resize(dims_[0] * dims_[1] * dims_[2] * dims_[3]);
}
double& operator ()(size_t i, size_t j, size_t k, size_t l) {
return data_(index(i, j, k, l));
}
const double& operator ()(size_t i, size_t j, size_t k, size_t l) const {
return data_(index(i, j, k, l));
}
// std::vector<double> resizeR4TensortoVector(const TensorRank4 &t_dim4, int dim0, int dim1, int dim2, int dim3){
void setZero() { data_.setZero();}
void clear() {
data_.resize(0);
std::fill(dims_, dims_ + 4, 0); // It may not be std::fill but you get the posize_t.
}
private:
size_t index(size_t i, size_t j, size_t k, size_t l) const {
return i * dims_[3] * dims_[2] * dims_[1]
+ j * dims_[3] * dims_[2]
+ k * dims_[3]
+ l;
}
size_t dims_[4];
Eigen::VectorXd data_;
};
但是,当我运行此代码时,我收到错误:
没有匹配的构造函数来初始化"TensorRank4">
根据一些搜索,它似乎与没有此类的默认构造函数有关,但我对如何解决此问题感到困惑。
这一行:
std::vector<TensorRank4> DIIS_Tensors(DIIS_num_iters);
正在尝试默认构造DIIS_num_iters
数量的TensorRank4
对象。因此,如果您没有默认 ctor,编译器会抱怨。
只需将默认 ctor 添加到您的TensorRank4
类中:
TensorRank4() {
//Code if needed
}
请注意,如果您为参数化 ctor 提供默认参数,则也可以拥有默认 ctor,如下所示:
TensorRank4(size_t dim0 = val0, size_t dim1 = val1, size_t dim2 = val2, size_t dim3 = val3) {
...
}
或者,您可以使用 ctor 显式构造向量中的副本,如下所示:
std::vector<TensorRank4> DIIS_Tensors(DIIS_num_iters, TensorRank4(5,5,5,5));
std::vector<TensorRank4> DIIS_Tensors(DIIS_num_iters);
>正在尝试构造DIIS_num_iters
默认插入的TensorRank4
类型的元素。
使用计数默认插入的 T 实例构造容器。
但是TensorRank4
没有默认构造函数,不能默认插入。
您可以为TensorRank4
添加默认构造函数,也可以将实例传递给vector
的构造函数。
使用值为
value
的元素的计数副本构造容器。
例如
// construct DIIS_Tensors with DIIS_num_iters copies of TensorRank4(1,2,3,4)
std::vector<TensorRank4> DIIS_Tensors(DIIS_num_iters, TensorRank4(1,2,3,4));
相关文章:
- 使用std::vector的OpenCL矩阵乘法
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- std::vector的包装器,使数组的结构看起来像结构的数组
- 编译器如何区分std::vector的构造函数
- 使用 pqxx 将 std::vector 存储在 postgresql 中,并从数据库中检索它
- 在std::vector上存储带有模板的类实例
- 在main()之外初始化std::vector会导致性能下降(多线程)
- 为什么std::vector比数组慢
- std::vector::迭代器是否可以合法地作为指针
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- 为什么std::vector和std::valarray初始化构造函数不同
- ";结果类型必须是可从输入范围的值类型""构造的;创建std::vector时
- 在没有未定义行为的情况下实现类似std::vector的容器
- 如何调整 std::vector of Eigen::MatrixXd 的大小
- 使用 std::vector::reverse_iterator 将 int 序列化为字节向量?
- 如何将AERT_Allocate与 std:vector 一起使用
- 推导 std::vector::back() 的返回类型
- 如何将原始字节附加到 std::vector?
- std::vector 没有重载函数的实例与参数列表匹配
- 如果 KEY 是 std::list 或 std::vector 而不是值,那么 std::map 的默认行为是什么?