我想通过在 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<std::string>::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
。
i
用0
初始化,并且始终满足条件 (i < stringVector.size()
)。
这就是为什么你会陷入无限循环。
【讨论】:
以上是关于我想通过在 C++ 中使用向量来获取用户输入,但我得到了无限循环的主要内容,如果未能解决你的问题,请参考以下文章