假设我创建了一个 vector ,其大小尚未表示且其元素是字符串。我想使用 for 循环和 cin
将字符串输入到这个 vector 中。然后,当用户完成输入字符串时,我希望 for 循环终止。
我知道有两种方法可以做到这一点。在 Windows 上使用 Ctrl + Z 或在 Unix 上使用 Ctrl + D 可以终止输入流。我还可以使用带 break
的 if 语句,以便在输入特定字符串(例如 "end"
)时,循环终止。
我的实现是两者中的后者:
vector<string> words;
for(string temp; cin >> temp;)
{
if(temp == "end")
{break;}
else
{words.push_back(temp);}
}
因此,对于输入 foo bar
循环不会终止,但是对于输入 foo bar end
循环终止(对于 foo end bar
循环将终止,这样 vector 只包含字符串 "foo"
).
上面的实现是最好的方法吗?只使用 Ctrl + Z 或 Ctrl + D 会不会更有效,因为这样可以避免在每次迭代中都经过 if 语句?
如果我们改为使用元素类型为 int
的 vector ,情况就会有所不同,因为用户可以输入任何非整数的内容来终止循环。但在字符串的情况下,用户输入的任何内容都可以被视为字符串。
我正在阅读 Bjarn Stroustrup 所著书籍的第 4 章,“编程 - 使用 C++ 的原则和实践”。
最佳答案
我更愿意循环 header 以反射(reflect)预期的退出条件,因此如果您想阅读直到用户输入 end
,我更愿意在条件中进行该测试循环的:
for (std::string temp; std::cin >> temp && temp != "end"; )
words.push_back(temp);
就“效率”而言,在这种情况下,它几乎肯定是无关紧要的。专注于使代码简单易读。仅在测量显示您需要时进行优化。
关于C++:终止迭代字符串 vector 的循环的最优雅方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47857780/