gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 04:11:56 25 4
gpt4 key购买 nike

假设我有一些代码:

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

跟踪,例如:

  • 狗的数量。
  • 走一步的次数。
  • 每一步的位置。 (单位步长(1))

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

direction = -dimensions 和 dimensions 之间的一些随机数(例如 -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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com