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:)现在一个人可以在不知道的情况下学习核物理真是太神奇了。。。