【问题标题】:I want to get user input by using vector in C++ but I get infinite loop我想通过在 C++ 中使用向量来获取用户输入,但我得到了无限循环
【发布时间】: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);
    }
    
}

【问题讨论】:

    标签: c++ vector stl


    【解决方案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())。 这就是为什么你会陷入无限循环。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-02-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-26
          • 2015-10-02
          • 2019-02-01
          • 1970-01-01
          相关资源
          最近更新 更多