C :终止循环的最优雅方法,该循环在字符串向量上迭代
C++: Most elegant way to terminate a loop that iterates over a vector of strings?
说我创建了一个尚未表示大小的向量,其元素是字符串。我想使用for loop和 cin
将字符串输入此向量。然后,当用户完成输入字符串时,我希望for循环终止。
我知道这样做的两种方法。可以使用Windows上的CTRL Z或UNIX上的Ctrl D终止输入流。我也可以使用break
使用IF语句,因此在某个字符串的输入(例如"end"
)的输入中,Loop终止。
我的实现将是两者的后者:
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的《编程 - 使用C 的原理和练习》的第4章工作。
我宁愿循环标头来反映预期的退出条件,因此,如果您想阅读直到用户输入end
,我更喜欢在循环的条件:
for (std::string temp; std::cin >> temp && temp != "end"; )
words.push_back(temp);
就"效率"而言,在这种情况下,几乎肯定是无关紧要的。专注于使代码简单易读。仅在测量时进行优化。
相关文章:
- 在循环C++中指定字符串之后,不会打印该字符串
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 在for循环中使用auto vs decltype(vec.size())来处理字符串的向量
- C++-字符串是否包含一个带有简单循环的单词
- 在 c++ 中查找字符串中没有循环的数字总和
- 比较两个字符串后卡在无限循环中
- C++ - 使用基于范围的 for 循环将字符值分配给向量中的字符串不会分配值
- 而循环跳过 cin.getline() 对于 C 字符串
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 如何使用将字符串拆分为 for 循环中的变量的程序
- 是否有可能实现O(N)时间和O(1)空间解决方案,以实现C++中的字符串循环移位
- 循环访问还包含未使用元素的字符串数组
- 循环访问资源字符串表
- C++ - 使用用户输入的字符串数据检查结构字符串数据(无限执行 while 循环)
- 修改向量中的字符串?(不使用循环)
- For 循环字符串忽略字符
- 如何按空格循环字符串?我怎么知道字符串中我当前所在的单词的索引号
- 在 c++ 中循环字符串读取器
- 如何在 c++ 中循环字符串
- 分段错误,通过std按字符循环字符串