C ++:最优雅的方法来终止迭代字符串向量的循环?

时间:2017-12-17 17:38:10

标签: c++ string loops vector

假设我创建了一个大小尚未表示且其元素为字符串的向量。我想使用for循环和cin将字符串输入到此向量中。然后,当用户输入完字符串后,我希望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,循环将终止,使得向量仅包含字符串"foo")。

上述实施是最好的方法吗?使用Ctrl + Z或Ctrl + D会更有效率,因为这样可以避免在每次迭代中都经过if语句吗?

如果我们改为使用其元素类型为int的向量,则会有所不同,因为用户可以输入任何非整数的内容以终止循环。但是在字符串的情况下,用户输入的任何内容都可以被视为字符串。

我正在阅读Bjarn Stroustrup一书中的第4章,“编程 - 使用C ++的原理和实践”。

1 个答案:

答案 0 :(得分:7)

我更喜欢循环标头以反映预期的退出条件,因此如果您想要读取直到用户输入end,我宁愿在循环条件下进行该测试:

for (std::string temp; std::cin >> temp && temp != "end"; )
    words.push_back(temp);

就“效率”而言,在这种情况下,它几乎肯定无关紧要。专注于使代码简单易读。仅在您需要测量显示时进行优化。