微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

这个函数中发生了什么?

如何解决这个函数中发生了什么?

#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。

为什么会这样?有人可以帮忙吗?

解决方法

如果我们跟踪程序中的控制流,就会很明显发生了什么:

  1. main我们叫print_vector(data)
  2. 第一个输出是 size 5cout<< "size " << size << endl;
  3. 我们进入 for 循环:
    1. 第一次迭代(i == 0data[i] == 1
      • if(data[i] == 3) 的计算结果为 false
      • 我们从 1 获得输出 cout<< data[i] << endl;
    2. 第二次迭代 (i == 1,data[i] == 2)
      • if(data[i] == 3) 的计算结果为 false
      • 我们从 2 获得输出 cout<< data[i] << endl;
    3. 第三次迭代(i == 2data[i] == 3
      • if(data[i] == 3) 的计算结果为 true
      • 我们通过返回 i(即 2)来打破循环
  4. print_vector 返回的值打印在 cout<< print_vector(data) << endl;

所以你得到的输出是

size 5
1
2
2

该函数不会返回两次(那是不可能的),向量的大小也不会神奇地减小。事实上,你只打印一次大小,所以没有理由期望这些数字中的任何一个(除了第一个)与向量大小相关。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。