这个函数发生了什么?

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.

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

如果我们跟踪您程序中的控制流,就会清楚发生了什么:

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

所以你得到的输出是

size 5
1
2
2

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