C++:终止迭代字符串 vector 的循环的最优雅方式?

标签 c++ string loops vector

假设我创建了一个 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/

相关文章:

c - 这两行代码在程序中的工作

javascript - 在 onclick 函数之后使用循环从数组调用字符串 [javascript]

java - 如何在循环外打印语句以避免重复?

r - 在 R 中的 if 语句中使用 for 循环

java - 如何使用 JAVA 在 HTTP GET 中设置 utf

c++ - 将STL函数与结构一起使用?

c++ - 存在 std::move 时未使用移动语义

c++ - 点云文件格式 (PCL)

c++ - 重定向文件访问

python - 如何在 Python 中使用 [] 拆分字符串