假设我想从控制台读取行并将它们放入容器中,直到用户输入空行。不过,我不想让那空白的行结束在我的容器中。我能想到的五种不同的解决方案:直到用户输入空白行
一)从回路断线
std::vector<std::string> container;
for (; ;)
{
std::string line = get_input();
if (line.empty()) break;
container.push_back(line);
}
B)循环前阅读和内环路
std::vector<std::string> container;
std::string line = get_input();
while (!line.empty())
{
container.push_back(line);
line = get_input();
}
C)解读为循环条件的一部分,分配版本
std::vector<std::string> container;
std::string line;
while (!(line = get_input()).empty())
{
container.push_back(line);
}
d)作为循环条件的一部分读取,序列版本
std::vector<std::string> container;
std::string line;
while (line = get_input(), !line.empty())
{
container.push_back(line);
}
E)读得太多,循环之后
std::vector<std::string> container;
std::string line;
do
{
line = get_input();
container.push_back(line);
}
while (!line.empty());
container.pop_back();
所以删除它,你更喜欢哪解决,为什么?初学者最容易理解哪一个?
这样的方式,矫枉过正他是什么试图完成。 – 2010-12-10 14:21:33
我想这取决于你需要这么做的频率 - 如果你只使用它一次,我可以看到你可以争辩说它有点矫枉过正,但鉴于它只有大约10行代码,我不要以为你必须经常用它来证明它的合理性。 – 2010-12-10 14:25:05