C++ 为什么我离开了你的范围?

C++ 为什么我离开了你的范围?,c++,vector,C++,Vector,我的函数必须反转向量的值,但有一次我得到了一个超出范围的异常。请向我解释一下这两种情况之间的区别: /// working version of my function void Reverse(vector<int>& v) { for (int i = 0; i < v.size() / 2; i++) { int temp = v[i]; v[i] = v[v.size() - (i + 1)]; /// look

我的函数必须反转向量的值,但有一次我得到了一个超出范围的异常。请向我解释一下这两种情况之间的区别:

/// working version of my function
void Reverse(vector<int>& v)
{
    for (int i = 0; i < v.size() / 2; i++)
    {
        int temp = v[i];
        v[i] = v[v.size() - (i + 1)]; /// look at round brackets
        v[v.size() - (i + 1)] = temp; 
    }
}
/// wrong version
void Reverse2(vector<int>& v)
{
    for (int i = 0; i < v.size() / 2; i++)
    {

        int temp = v[i];
        v[i] = v[v.size() - i + 1];   /// this is wrong 
        v[v.size() - i + 1] = temp;   /// same
    }
}
/// 
int main()
{
    vector<int> v = { 10, 22, 13, 144, 55, 167, 999};
    Reverse(v);
    for (auto c : v)
    {
        cout << c << " ";
    }
}
///我的函数的工作版本
无效反向(矢量和v)
{
对于(int i=0;iv.size()-i+1
因为当
i=0
v.size()-0+1
v.size()+1
相同时,这显然是对
v
的越界引用


使用括号将为您提供
v.size()-1
,或向量的最后一个元素。

如果没有括号,则从左到右求值

5-4+1=2,
其中5-(4+1)=0。

提示:无论是
v[v.size()]
还是
v[v.size()+1]
都不在向量的范围内。
a-b+c
a-(b+c)之间的区别是什么
?@IgorR。我注意到了,谢谢,我明白了。谢谢你的解释。用bad:)现在一个人可以在不知道的情况下学习核物理真是太神奇了。。。