说我有一些类似的代码:

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

跟踪例如:
  • 狗的数量。
  • 此步骤要逐步执行。
  • 每个步骤的位置。 (步长为单位(1))

  • 如何为每个排便添加位置?
    我有:

    方向=尺寸和尺寸之间的一些随机数(例如-2,2对于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&)’
    

    最佳答案

    foo[foo.size()]用作std::vector<T> foo会访问foo的元素,而该元素仅在foo的范围之外:C和C++中的数组基于零,即,您可以访问索引0, ..., size()-1。访问此范围之外的元素是未定义的行为。

    关于c++ - 使用 `.size()`作为数组索引,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20023751/

    10-15 00:30
    查看更多