问题描述
#include <stdio.h>
#include <iostream>
#include <vector>
using namespace std;
int print_vector(vector<int> &data) {
int size = data.size();
cout<< "size " << size << endl;
for(int i = 0;i < size;i++) {
if(data[i] == 3) {
return i;
}
cout<< data[i] << endl;
}
cout<< "Hello!" << endl;
return data.size() - 1;
}
int main() {
vector<int> data = {1,2,3,4,5};
cout<< print_vector(data) << endl;
}
当我运行我的代码时,一旦它到达我的 if
语句,它返回 i
然后返回 data.size()
,它只有 2,如果我执行 data.size() -1
它还是 2。
为什么会这样?有人可以帮忙吗?
解决方法
如果我们跟踪程序中的控制流,就会很明显发生了什么:
- 从
main
我们叫print_vector(data)
- 第一个输出是
size 5
的cout<< "size " << size << endl;
- 我们进入
for
循环:- 第一次迭代(
i == 0
,data[i] == 1
)-
if(data[i] == 3)
的计算结果为false
- 我们从
1
获得输出cout<< data[i] << endl;
-
- 第二次迭代 (
i == 1
,data[i] == 2
)-
if(data[i] == 3)
的计算结果为false
- 我们从
2
获得输出cout<< data[i] << endl;
-
- 第三次迭代(
i == 2
,data[i] == 3
)-
if(data[i] == 3)
的计算结果为true
- 我们通过返回
i
(即2
)来打破循环
-
- 第一次迭代(
- 从
print_vector
返回的值打印在cout<< print_vector(data) << endl;
所以你得到的输出是
size 5
1
2
2
该函数不会返回两次(那是不可能的),向量的大小也不会神奇地减小。事实上,你只打印一次大小,所以没有理由期望这些数字中的任何一个(除了第一个)与向量大小相关。