这个函数发生了什么?
What is happening in this fuction?
#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
语句,它 returns i
然后 returns 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
- 我们从
cout<< data[i] << endl;
得到输出 1
- 第二次迭代(
i == 1
、data[i] == 2
)
if(data[i] == 3)
计算结果为 false
- 我们从
cout<< data[i] << endl;
得到输出 2
- 第三次迭代(
i == 2
、data[i] == 3
)
if(data[i] == 3)
计算结果为 true
- 我们通过 returning
i
(即 2
) 来打破循环
- 从
print_vector
编辑的值 return 打印在 cout<< print_vector(data) << endl;
所以你得到的输出是
size 5
1
2
2
函数不会 return 两次(那是不可能的),向量的大小也不会神奇地减小。事实上,您只打印一次大小,因此没有理由期望这些数字中的任何一个(第一个除外)与向量大小相关。
#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
语句,它 returns i
然后 returns 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
- 我们从
cout<< data[i] << endl;
得到输出
1
- 第二次迭代(
i == 1
、data[i] == 2
)if(data[i] == 3)
计算结果为false
- 我们从
cout<< data[i] << endl;
得到输出
2
- 第三次迭代(
i == 2
、data[i] == 3
)if(data[i] == 3)
计算结果为true
- 我们通过 returning
i
(即2
) 来打破循环
- 第一次迭代(
- 从
print_vector
编辑的值 return 打印在cout<< print_vector(data) << endl;
所以你得到的输出是
size 5
1
2
2
函数不会 return 两次(那是不可能的),向量的大小也不会神奇地减小。事实上,您只打印一次大小,因此没有理由期望这些数字中的任何一个(第一个除外)与向量大小相关。