访问4d向量的问题
Problem accessing 4d vector
我有一个4d矢量,我正试图为它添加值。我没有收到任何编译器错误,但是当运行它时,当它到达我向这个向量添加值的那一行时,程序冻结了。
我在头文件中像这样初始化vector:
std::vector<std::vector<std::vector<std::vector<unsigned int> > > > _celllist;
数组的大小按如下所示:
_celllist.resize(_vnx);
for(int i=0;i<_vnx;i++)
{
//y axis size
_celllist[i].resize(_vny);
for(int j=0;j<_vny;j++)
{
//z axis size
_celllist[i][j].resize(_vnz);
}
}
这一行会导致程序崩溃:
_celllist[ix][iy][iz].push_back(i);
注意ix、iy和iz都是int型,i是无符号int型。
有人能看出这里可能出了什么问题吗?由于
操作符[]不展开或保证元素是有效的。它是at()的更快版本,很少或没有错误检查:
暂时将代码转换为更安全的版本:
_celllist.at(ix).at(iy).at(iz).push_back(i);
这个新代码将抛出一个out_of_range异常,如果你的索引是关闭的。
我猜你在做越界访问你的数组。当你做_celllist[ix][iy][iz].push_back(i)
时,是_celllist.size() > ix
,是_celllist[ix].size() > iy
,是_celllist[ix][iy].size() > iz
?
你不能这样做,因为celllist[ix]不存在,因为没有任何东西被推回它。你把i推到第四个嵌套向量,而第四个嵌套向量必须作为元素包含在第三个元素中,作为元素包含在第二个元素中,等等。
更清楚地vector>v;
I can't do:
v[0].push_back(1);
直到我做:
v.push_back(vector<int>());
但是现在我已经这么做了,
v[0]
实际上是v的一个元素,它本身也是一个向量。因此,我可以访问它并执行push操作,比如:
v[0].push_back(7);
您看到的错误可能是由于对vector的越界访问引起的。注意,std::vector::operator[]
不检查边界!虽然std::vector::at()
有。
std::vector
可能不是你想要的东西。当然,您可以像这样使用嵌套的std::vector
,但请记住,这不会像您想象的那样创建4d矩阵。std::vector
只管理连续内存中的动态数组。
也许你会更喜欢普通的C嵌套数组,例如unsigned int[XDIM][YDIM][ZDIM]
.
- 如何在C++向量中奇数元素前面加上值-1,我在使用insert函数时遇到了问题
- 添加存储在向量中的大整数的函数出现问题
- 尝试将向量初始化为类成员时出现问题
- 在将字符串放入字符串向量时遇到问题?
- 取消引用向量时出现问题
- 在C++中对结构向量进行排序时出现问题
- 在 c++ 中创建和访问 4D 向量时出现问题
- 数组为此合并排序函数提供了正确的输出,但向量给出了不正确的输出.出了什么问题?
- 使用指针向量(带代码)C++(以及对其使用的便利性的怀疑)时出现问题
- C++ 继承向量问题(无限循环+在其他类中使用向量的问题)
- 在 c++ 中访问列表向量时出现问题
- c++向量push_back问题
- shared_ptr类的向量的向量初始化问题
- SWIG c++到python:向量问题
- 在 Rcpp-Function 中使用布尔向量的子集(Rcpp 初学者的问题..)
- 无法取消引用超出范围的向量迭代器 - 有什么问题?
- 在构造函数中更新指针向量时出现问题
- 在使用 std::sort() 和 lambda 函数按属性对 ADT 的向量进行排序时遇到问题
- 为什么C++在自定义结构向量时会出现 ostream 重载问题?
- C++:问题向量 STL.