如何在while循环中重新初始化向量?

时间:2019-06-01 10:48:36

标签: c++ algorithm c++11 initialization stdvector

我正在做一些练习。我正在尝试制作一个简单的游戏,需要用户不断输入矢量。

我试图重新初始化向量。我在while(1)循环中使用过,也尝试过clear()

vector<int> user;                 // initialize vector
while (1)
{                                 
    for (int guess; cin >> guess;)// looping
    {                             // user input
        user.push_back(guess);
    }
    if (user.size() != 4)         // check if user put exactly 4 numbers
    {         
        cerr << "Invalid input";
        return 1;
    }
    //...                        // doing some stuff with "int bulls"
    if (bulls == 4)
    {
        break;
    }
}    // now need to go back with emty vector, so that the user can input guesses again 

在我的终端中,它永远循环运行,或者在我输入无效输入的条件下停止运行。

1 个答案:

答案 0 :(得分:2)

由于

,您有一个无限循环
for(int guess; cin >> guess;)

push_back用户引导的位置,直到std::cin失败。

您可能希望输入4个用户。如果是这样,请尝试以下操作,通过该操作,您无需清除向量,因为在每个while循环中都可以创建一个新向量。

while (true)
{   
    std::vector<int> user;
    user.reserve(4); // reserve memory which helps not to have unwanted reallocations
    int guess;
    while(cin >> guess &&  user.size() != 4)
        user.emplace_back(guess);

    // doing some stuff with "int bulls"
    if (bulls == 4) {
        break;
    }
}