如何在 C++ 中使用 3 维向量?
vector<vector<vector<int> > > vec (1,vector<vector<int> >(1,vector <int>(1,12)));
当我尝试这样的事情时
cout << vec[0][0][0]; vec[0][0][1] = 13;
一切都很好。
问题是我只能更改最后一个元素。如果我尝试访问第一个和第二个元素,就像这样
vec[0][1][0] = 13;
or this
vec.push_back(vector<vector<int > >());
vec[0].push_back(vector<int>());
v[1][0].push_back(13);
我的程序崩溃了。
如何添加和访问 3d 矢量中的元素?
我永远不会做vector<vector<vector<int> > >
因为这样你就有很多分配,这可能会很昂贵。我会简单地使用vector<int>
具有智能索引(例如:见下文)。如果您将与double
基于矩阵,这样英特尔MKL https://software.intel.com/en-us/intel-mkl或任何其他 BLAS 库都可以轻松使用。
它的代价是当矩阵大小改变时复杂性会增加,但你可以在性能上赢得很多。
有用的链接:C++ FAQ http://isocpp.org/wiki/faq/operator-overloading#overview-op-ov.
static int const M = 16;
static int const N = 16;
static int const P = 16;
inline int& set_elem(vector<int>& m_, size_t i_, size_t j_, size_t k_)
{
// you could check indexes here e.g.: assert in debug mode
return m_[i_*N*P + j_*P + k_];
}
inline const int& get_elem(const vector<int>& m_, size_t i_, size_t j_, size_t k_)
{
// you could check indexes here e.g.: assert in debug mode
return m_[i_*N*P + j_*P + k_];
}
vector<int> matrix(M*N*P, 0);
set_elem(matrix, 0, 0, 1) = 5;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)