使用 3 维向量的问题

2024-04-15

如何在 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(使用前将#替换为@)

使用 3 维向量的问题 的相关文章

随机推荐