使用`.size()`作为数组索引

时间:2013-11-16 20:53:50

标签: c++ vector multidimensional-array size random-walk

说我有一些代码:

typedef std::vector<std::vector<std::vector<long int> > > posHistory;
posHistory pHist (1, vector<vector<long int>>(1, vector<long int>(1,0)));

跟踪,例如:

  • 狗的数量。
  • 次数需要一步。
  • 每一步的位置。 (统一步长(1))

我怎样才能为每次排便添加位置? 我有:

方向=介于维度和维度之间的一些随机数(比如-2d为-2d) tdof =平移自由度,基本上是每个轴。

for (unsigned int tdof = 0; tdof < dimensions; tdof++)
{
    if (fabs(direction) < tdof)
    {
        walkHist[(int) walkHist.back()][(int) walkHist[walkHist.back()].size()][tdof] = (long int) copysign(1, direction);
    }
}

给我带来麻烦的部分是:

walkHist[walkHist.size()-1][walkHist[walkHist.size()-1].size()][ (long int) copysign(1, direction)];

后来在我的代码中:

walkHist[(walkHist.size()-1)].push_back();
walkHist.push_back(); 

我很确定这是size_type与索引之间的转换,但是我怎么能纠正这个问题呢?

我已经尝试过施法,但这似乎不起作用,虽然我可能做错了。 总之,有帮助吗?

编辑1

第一次推回给了我一个错误:

saw.cpp:62:50: error: no matching function for call to ‘std::vector<std::vector<long int> >::push_back()’

编辑2

嗯,似乎walkHist.at(walkHist.back()).size()给了我:

saw.cpp:49:52: error: no matching function for call to ‘std::vector<std::vector<std::vector<long int> > >::at(__gnu_cxx::__alloc_traits<std::allocator<std::vector<std::vector<long int> > > >::value_type&)’

1 个答案:

答案 0 :(得分:2)

使用foo[foo.size()] std::vector<T> foo访问foo的{​​{1}}元素,只是在foo范围之外:C和C ++中的数组是从零开始的,即你可以访问索引0, ..., size()-1。访问此范围之外的元素是未定义的行为。