假设我在循环中有一个循环和一个if语句。如果我在循环中是真的,它会用空格或逗号进行打印,并且它会为其他正确的情况执行此操作,但我想对最后一个做其他事情。我该怎么做?
for (i = 0; i <= somenum; i++){
if (i % 2 != 0)
{
cout << i;
}
}
我想弄清楚条件之后的最后一个值,并用它做其他事情。
答案 0 :(得分:0)
有三种方法可以解决这个问题。为了说明这一点,我将使用你想要一个for循环的例子来打印由逗号和空格分隔的数字0-9。
(1)每次循环都做同样的事情,但在循环后修改你的结果。如何执行此操作的示例是:
#include <iostream>
#include <sstream>
int main(int, char**) {
std::stringstream ss;
for (int i = 0; i < 10; ++i) {
ss << i << ", ";
}
ss.seekp(-2, std::ios_base::end);
ss << '\0';
std::cout << ss.str();
}
(2)在最后一次迭代之前退出循环并处理循环外的最后一个案例:
#include <iostream>
int main(int, char**) {
for (int i = 0; i < 9; ++i) {
std::cout << i << ", ";
}
std::cout << 9;
}
(3)特殊情况你在循环中的最后一次迭代。此选项很糟糕,您可能只想在不能应用1或2的情况下执行此操作。这很糟糕的原因是因为循环中的条件将每次都执行,并且只会是一次。
#include <iostream>
int main(int, char**) {
std::stringstream ss;
for (int i = 0; i < 10; ++i) {
if (i == 9) {
std::cout << i;
break;
}
std::cout << i << ", ";
}
}
在大多数情况下,从性能角度来看,选项2是您最好的选择,但有时选项1提供了更有价值的清洁代码。
答案 1 :(得分:-1)
如果您有&#34;序列&#34;那么你无法知道一个元素是否是最后一个元素。如果您使用已知长度的for
循环,那么它很简单:
for(size_t i = 0; i < length; i++ ) {
if( i == length - 1 ) {
// do something for the last element
}
}
阅读你的问题,听起来你想在元素之间打印一个逗号,但显然不想要一个逗号。解决方案不是测试最后一个,而是实际测试第一个,如下所示:
bool isFirst = true;
iterator it;
for( it = sequence.begin(); it != sequence.end(); it++ ) {
if( !isFirst ) print(", ");
isFirst = false;
print( element );
}