在C ++中用循环中的最后一个值做一些事情

时间:2014-10-10 20:06:42

标签: c++ for-loop

假设我在循环中有一个循环和一个if语句。如果我在循环中是真的,它会用空格或逗号进行打印,并且它会为其他正确的情况执行此操作,但我想对最后一个做其他事情。我该怎么做?

for (i = 0; i <= somenum; i++){
    if (i % 2 != 0)
    {
        cout << i;
    }
}

我想弄清楚条件之后的最后一个值,并用它做其他事情。

2 个答案:

答案 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 );
}