c++基础,pat乙级1005

调试了一下,发现在cin>>ivec[num]好像报错,这样写不行吗?我感觉有点奇怪,希望有人能告诉我原理,当然也希望看一下后面有没有写错的。
出处pat乙级1005

img


#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int num;
    cin >> num;
    vector<int> ivec(num);
    vector<int> collect;
    for (int i = 0; i != num; ++num) {
        cin >> ivec[num];
        int temp = ivec[num];
        while (temp != 1) {
            if (temp % 2 == 1) {
                temp = (3 * temp + 1) / 2;
                collect.push_back(temp);
            }
            else {
                temp /= 2;
                collect.push_back(temp);
            }
        }
    }
    vector<int> fcollect;
    for (int i = 0; i != num; ++i) {
        if (find(collect.begin(), collect.end(), ivec[i]) == collect.end()) {
            fcollect.push_back(ivec[i]);
        }
    }
    sort(fcollect.begin(), fcollect.end(), [](int a, int b) {return a > b; });
    for (auto i : fcollect) {
        auto it = fcollect.begin();
        cout << i;
        while (it != fcollect.end() - 1) {
            cout << " ";
        }
        ++it;
    }
    return 0;
}

第11行, vector ivec(num);不用这么写,直接写 vector ivec;就可以了
第14行 cin >> ivec[num];写错了,应该是 cin >> ivec[i];
第15行 int temp = ivec[num];应该是 int temp = ivec[i];


 
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
    int num;
    cin >> num;
    vector<int> ivec(num);
    vector<int> collect;
    for (int i = 0; i != num; ++i) {
        cin >> ivec[i];
        int temp = ivec[i];
        while (temp != 1) {
            if (temp % 2 == 1) {
                temp = (3 * temp + 1) / 2;
                collect.push_back(temp);
            }
            else {
                temp /= 2;
                collect.push_back(temp);
            }
        }
    }
    vector<int> fcollect;
    for (int i = 0; i != num; ++i) {
        if (find(collect.begin(), collect.end(), ivec[i]) == collect.end()) {
            fcollect.push_back(ivec[i]);
        }
    }
    sort(fcollect.begin(), fcollect.end(), [](int a, int b) {return a > b; });
    for (auto i : fcollect) {
        auto it = fcollect.begin();
        cout << i;
        while (it != fcollect.end() - 1) {
            cout << " ";
        }
        ++it;
    }
    return 0;
}

弄好了,后面输出时if写成了while