首页 > 解决方案 > 这个函数发生了什么?

问题描述

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

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

标签: c++vectorreturncout

解决方案


如果我们跟踪程序中的控制流,那么发生的事情应该很明显:

  1. main我们打电话print_vector(data)
  2. 第一个输出size 5来自cout<< "size " << size << endl;
  3. 我们进入for-loop:
    1. 第一次迭代 ( i == 0, data[i] == 1)
      • if(data[i] == 3)评估为false
      • 我们1cout<< data[i] << endl;
    2. 第二次迭代 ( i == 1, data[i] == 2)
      • if(data[i] == 3)评估为false
      • 我们2cout<< data[i] << endl;
    3. 第三次迭代 ( i == 2, data[i] == 3)
      • if(data[i] == 3)评估为true
      • i我们通过返回(即2)来打破循环
  4. 返回的值print_vector打印在cout<< print_vector(data) << endl;

所以你得到的输出是

size 5
1
2
2

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


推荐阅读