我想通过在 C++ 中使用向量来获取用户输入,但我得到了无限循环

Posted

技术标签:

【中文标题】我想通过在 C++ 中使用向量来获取用户输入,但我得到了无限循环【英文标题】:I want to get user input by using vector in C++ but I get infinite loop 【发布时间】:2020-09-13 04:29:29 【问题描述】:

我是 C++ 的新手。我想通过使用向量来获取用户输入。我将向量大小设置为 5。但是,我在 for 循环中得到了无限循环。如果有什么问题,请告诉我。提前致谢。

 int main() 

     std::string name;
     std::vector<std::string> stringVector (5);

    for(int i = 0 ; i < stringVector.size(); i++)
    
        std::cout << "Enter the name" << std::endl;
        std::getline(std::cin, name);
        stringVector.push_back(name);
    
    

【问题讨论】:

【参考方案1】:

std::vector&lt;std::string&gt;::push_back() 插入一个新元素,即添加一个新元素并使大小增加一,因此您有一个无限循环。请注意,您希望循环在达到迭代大小后停止,但每次迭代的大小都会增加。您可以改用以下内容

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

int main() 

    std::string name;
    std::vector<std::string> stringsVector (5);

    for(size_t i ; i < stringsVector.size(); i++)
    
        std::cout << "Enter the name" << std::endl;
        std::getline(std::cin, name);
        stringsVector[i] = name;
    
    std::for_each(stringsVector.cbegin(), stringsVector.cend(), [](auto & el)std::cout << el << " ";);

Demo

【讨论】:

【参考方案2】:

当使用对象大小为 5 "stringsVector (5)" 时不需要使用 pushback,否则它将在每个循环中将对象的大小增加 1

为了便于理解,使用简单的 for 循环

#include <iostream>
#include <vector>

using namespace std;

int main() 
    std::string name;
    std::vector<std::string> stringsVector (5);

    for(size_t i= 0 ; i < stringsVector.size(); i++)
    
        std::cout << "Enter the name" << std::endl;
        std::getline(std::cin, name);
        stringsVector[i] = name;
    

    for(size_t i= 0 ; i < stringsVector.size(); i++)
    
        std::cout << stringsVector[i] << " ";
    

【讨论】:

【参考方案3】:

在stringVectorstringVector.size() = 5初始化之后, 每次迭代后,大小都会增加1

i0 初始化,并且始终满足条件 (i &lt; stringVector.size())。 这就是为什么你会陷入无限循环。

【讨论】:

以上是关于我想通过在 C++ 中使用向量来获取用户输入,但我得到了无限循环的主要内容,如果未能解决你的问题,请参考以下文章

获取输入行并将该行中的单词添加到 C++ 中的向量的最佳方法是啥?

C++:试图理解通过引用传递向量

用户将元素输入到二维向量c++中

在 C++ 中使用数字和条件填充向量

在向量循环 C++ 中终止字符串输入

了解向量乘法