如何解决这个函数中发生了什么?
#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
该函数不会返回两次(那是不可能的),向量的大小也不会神奇地减小。事实上,你只打印一次大小,所以没有理由期望这些数字中的任何一个(除了第一个)与向量大小相关。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。