C++ 使用“.size()”作为数组索引

C++ 使用“.size()”作为数组索引,c++,vector,multidimensional-array,size,random-walk,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))); 在后面的代码中,我有: walkHist[(walkHist.size()-1)].push_back(); w

假设我有一些代码,比如:

typedef std::vector<std::vector<std::vector<long int> > > posHistory;
posHistory pHist (1, vector<vector<long int>>(1, vector<long int>(1,0)));
在后面的代码中,我有:

walkHist[(walkHist.size()-1)].push_back();
walkHist.push_back(); 
我很确定问题出在size_类型到索引之间的转换,但是我该如何纠正呢

我试过选角,但似乎不起作用,尽管我可能做错了。 简言之,帮助

编辑1 第一次回推给我一个错误:

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

<>使用<代码> fo[fOsi.siz()] /<代码:<代码fo>代码>访问<代码> fo<代码>的元素,在代码< fO范围之外:C和C++中的数组是零基的,即,可以访问索引<代码> 0,…,siz()- 1 < /C>。访问此范围之外的元素是未定义的行为。

实际错误是什么?向量向量中是否包含任何元素?如果您试图使用
size()-1
,但
size()
为0,那么您也有UB。只要数组不是空的:
a[a.size()-1]
提供了与
a.back()
相同的引用,这看起来更容易阅读。另外,
push_back()
需要一个参数。谢谢!在程序开始之前,所有向量都初始化为1。我不知道.back(),我现在就用它。@RetiredInja在错误中加了一句,对不起。我有忘记它们的习惯。我是新来的,我将学习>。我知道,这就是为什么在我访问它们的每个地方都有-1。@NictraSavios:谢谢你指出这一点,但是你使用的是一个
size()
,没有
-1
:演员左侧的一个
长int
!也就是说,我注意到了
-1
s,还注意到了一个缺失的代码(似乎我比您更关注您的代码)。还要注意,
foo.size()-1
foo.size()==0
(即,
foo.empty()
)的情况下将是非法索引。谢谢,向量初始化为一个,并且从未调整大小,所以我应该可以,但是如果发生这种情况,是否有一个命令会抛出一个可能被捕获的错误?在长int cast的左边是一个case副本,这实际上是不正确的语法。。。虽然我现在修好了。(我将要赋值的值放在索引位置,而不是赋值。@NictraSavios:如果要检查索引边界,可以使用而不是
运算符[]
@blastfurny我不知道如何将std::vector::at与多维数组一起使用,这就是为什么我一开始没有使用它的原因。我四处搜索了一下,但找不到任何有用的东西。
walkHist[(walkHist.size()-1)].push_back();
walkHist.push_back(); 
saw.cpp:62:50: error: no matching function for call to ‘std::vector<std::vector<long int> >::push_back()’
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&)’